2016-04-24 10 views
7

Sto provando a filtrare un elenco di elementi dal loro indice, ed è possibile che il primo elemento sia l'elemento che voglio ottenere.Filtra una serie di numeri in cui 0 è un input valido

Sembra che cercare di filtrare un 0 utilizzando

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

non funziona. Anche se Number.isInteger(0) è vero.

Ecco un violino che ho creato per mostrare un esempio. L'array filtrato dovrebbe avere due valori, non uno.

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

risposta

8

perché 0 è un valore falsey in javascript ritorno f dove f è 0 sarà essenzialmente ritorneremo falso.

arr.filter(Number.isInteger) 

dovrebbe essere tutto ciò che serve dal filtro vuole una funzione che restituisce vero o falso in ogni modo.

2

La dichiarazione all'interno della vostra funzione .filter() sta tornando 3, 0, undefined, che nel Falsey universo/truthy è true, false, false. Ciò significa che il ritorno dalla funzione .filter() è [3].

Se si desidera restituire tutti i valori interi utilizzare il seguente:

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

Ciò restituirà [3,0] dalla funzione .filter().

1

Array.filter esegue una determinata funzione su ciascun elemento dell'array e decide se mantenerlo o lanciarlo in base al fatto che la funzione restituisca true o false. Non è necessario restituire il numero da solo.

Restituendo il numero stesso, si finisce per restituire il numero 0, che array.filter percepisce come "falso", causando la mancata inclusione.

Poiché Number.isInteger() restituisce un valore vero o falso da solo, è sufficiente usarlo da solo.

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