2017-09-12 27 views
6

オブジェクトの配列を受け取る「フィルタ」関数を作成しました。各オブジェクトにはaccountIdプロパティがあります。私の関数は、異なるaccountIdを持つオブジェクトを除外することになっています。しかし、そこにはundefinedオブジェクトがあります。JS find関数が未定義にプッシュ

私の機能に何が問題なのですか?

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

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

    return filteredItems; 
} 

私は配列ではありません、私の関数にaccountIdを渡すと、出力はその内の1つの項目を持つ配列で、項目が定義されていない - 下記参照:

[ 
    0: undefined 
] 

何を私は間違っている?

+0

注:1つの要素のみを返すかどうかを指定する場合は、filteredItem ** s **という名前の_Array_を返すのはなぜですか?少なくとも、それはArray.prototype.find()がするものです。たぶんあなたは 'return myArray.filter(...);'を行うことを意図したでしょうか? – blex

+0

'accountId'がパラメータで指定されたものと一致するすべての要素を返したいとします。したがって、最終結果には複数のオブジェクトが存在する可能性があります。一致する 'accountId'を持つオブジェクトがない場合、空の配列を返したいと思います。 – Sam

+0

次に、@ニーナの答えに行く。一致する場合は複数の要素を返す唯一のものですが、何もない場合は空の配列 – blex

答えて

3

もし配列をフィルタリングして空の配列を返すことができます 見つかりません。

3

コードは常に.push()を呼び出します。 .find()関数は、項目が見つからない場合はundefinedを返します。

あなたは.find()からの戻り値を取得し、それが実際に見つかったときにのみ、結果をプッシュすることができます:

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)

は、代わりにこれを試してみてくださいundefinedを返している(そしてそれはfilteredItemsに押されています) :