2016-04-24 1 views
7

Ich versuche, eine Liste von Elementen nach ihrem Index zu filtern, und es ist möglich, dass das erste Element das Element ist, das ich erhalten möchte.Filtern Sie ein Array von Zahlen, wobei 0 eine gültige Eingabe ist

Es scheint, dass ein 0 mit

arr.filter(function(f) { 
    if (Number.isInteger(f)) return f; 
}); 

zu filtern versuchen, funktioniert nicht. Obwohl Number.isInteger(0) wahr ist.

Hier ist eine Geige, die ich erstellt habe, um ein Beispiel zu zeigen. Das gefilterte Array sollte zwei Werte haben, nicht eins.

https://jsfiddle.net/yb0nyek8/1/

Antwort

8

weil 0 ein Falsey Wert in Javascript ist f Rückkehr wobei f 0 wird im Wesentlichen falsch zurückkehren.

sollte alles sein, was Sie brauchen, da der Filter eine Funktion hat, die wahr oder falsch sowieso zurückgibt.

2

Die Aussage in Ihrer .filter() Funktion zurückkehrt 3, 0, undefined, die in der truthy/Falsey Universum true ist, false, false. Dies bedeutet, dass die Rückkehr von der .filter()-Funktion [3] ist.

Wenn Sie möchten, dass alle ganzzahligen Werte der folgenden verwenden, um zurückzukehren:

var a1 = arr.filter(function(f) { 
    return Number.isInteger(f); 
}); 

Dies wird [3,0] aus der .filter() Funktion zurückzukehren.

1

Array.filter führt eine bestimmte Funktion für jedes Element im Array aus und entscheidet, ob es beibehalten oder übergeben wird, je nachdem, ob die Funktion wahr oder falsch zurückgibt. Sie müssen die Nummer nicht selbst zurückgeben.

Wenn Sie die Zahl selbst zurückgeben, erhalten Sie die Zahl 0 zurück, die array.filter als "false" wahrnimmt, sodass sie nicht eingeschlossen wird.

Da Number.isInteger() selbst eine true oder false zurückgibt, verwenden Sie sie einfach selbst.

arr.filter(function (f){ 
    Number.isInteger(f); 
}) 
Verwandte Themen