2017-09-12 2 views
6

Ich habe eine "Filter" -Funktion erstellt, die ein Array von Objekten empfängt. Jedes Objekt hat eine accountId Eigenschaft. Meine Funktion soll Objekte filtern, die einen anderen accountId haben. Es drängt jedoch ein undefined Objekt hinein.JS finde Funktion undefiniert drücken

Was ist falsch an meiner Funktion?

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

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

    return filteredItems; 
} 

Wenn ich eine accountId meiner Funktion übergeben, die nicht in dem Array ist, ist die Ausgabe ein Array mit einem Element darin und das Element nicht definiert ist - siehe unten:

[ 
    0: undefined 
] 

Was mache ich falsch?

+0

Nebenbei: Warum gibt Ihre Funktion einen _Array_, namens filteredItem ** s ** zurück, wenn Sie nur ein Element oder keines zurückgeben wollen? Zumindest macht das 'Array.prototype.find()'. Vielleicht wollten Sie 'return myArray.filter (...);'? – blex

+0

Ich möchte alle Elemente zurückgeben, deren 'accountId' mit der im Parameter angegebenen übereinstimmt. Es kann also mehr als ein Objekt im Endergebnis sein. Wenn keines der Objekte eine übereinstimmende 'accountId' hat, möchte ich ein leeres Array zurückgeben. – Sam

+0

Dann gehen Sie für @ Ninas Antwort. Das ist das einzige, das mehrere Elemente zurückgibt, wenn sie übereinstimmen, und ein leeres Array, falls keines vorhanden ist. – blex

Antwort

3

Sie könnten nur das Array filtern und ein leeres Array zurückgeben, wenn nicht gefunden.

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

Ihr Code ruft immer .push() auf. Die Funktion .find() gibt undefined zurück, wenn das Element nicht gefunden wird.

Sie können den Rückgabewert von .find() greifen und dann nur das Ergebnis drücken, wenn es tatsächlich gefunden hat:

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) ist undefined Rückkehr (und es zu filteredItems wird gedrückt)

Versuchen Sie stattdessen :

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

if(item) { 
    filteredItems.push(item); 
} 
//... 
Verwandte Themen