2017-09-12 16 views
6

Tôi đã tạo một hàm "bộ lọc" nhận một mảng các đối tượng. Mỗi đối tượng có thuộc tính accountId. Chức năng của tôi được cho là lọc ra các đối tượng có khác nhau accountId. Đó là, tuy nhiên, đẩy một đối tượng undefined trong đó.JS tìm chức năng đẩy không xác định

Có gì sai với chức năng của tôi?

export const filterItems = (myArray, accountId) => { 

    let filteredItems = []; 
    filteredItems.push(myArray.find(items => items.accountId === accountId)); 

    return filteredItems; 
} 

Khi tôi vượt qua một accountId đến chức năng của tôi không có trong mảng, đầu ra là một mảng với một mục trong nó và mục là undefined - xem dưới đây:

[ 
    0: undefined 
] 

gì tôi đang làm sai à?

+0

Lưu ý: Tại sao hàm của bạn trả về _Array_, named namedItem ** s **, nếu bạn chỉ định trả về một phần tử hay không? Ít nhất, đó là những gì 'Array.prototype.find()' hiện. Có lẽ bạn muốn làm 'return myArray.filter (...);'? – blex

+0

Tôi muốn trả về tất cả các phần tử có 'accountId' khớp với các phần tử được chỉ định trong tham số. Vì vậy, nó có thể có nhiều hơn một đối tượng trong kết quả cuối cùng. Nếu không có đối tượng nào có 'accountId' khớp, tôi muốn trả về một mảng trống. – Sam

+0

Sau đó, truy cập câu trả lời của @ Nina. Đó là người duy nhất sẽ trả lại nhiều phần tử nếu chúng khớp nhau và một mảng trống nếu không có bất kỳ một nào – blex

Trả lời

3

Bạn chỉ có thể lọc mảng và trả về một mảng trống nếu không tìm thấy.

export const filterItems = (myArray, accountId) => 
    myArray.filter(items => items.accountId === accountId); 
3

Mã của bạn luôn gọi .push(). Hàm .find() trả về không xác định nếu không tìm thấy mục.

Bạn có thể lấy giá trị trả về từ .find() và sau đó chỉ đẩy kết quả khi nó thực sự tìm thấy:

let filteredItems = []; 
let item = myArray.find(items => items.accountId === accountId); 
if (item !== undefined) 
    filteredItems.push(item); 
return filteredItems; 
3

myArray.find(items => items.accountId === accountId) là trở undefined (và nó đang được đẩy lên filteredItems)

Hãy thử này để thay thế :

//... 
let item = myArray.find(items => items.accountId === accountId); 

if(item) { 
    filteredItems.push(item); 
} 
//... 
Các vấn đề liên quan