2016-04-24 37 views
7

bir sayı dizisini süzgeç Öğelerin listesini dizine göre filtrelemeye çalışıyorum ve ilk öğeyi almak istediğim öğe olabilir.0 geçerli bir girdi

O çalışmıyor

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

kullanarak 0 filtrelemek için çalışıyor gibi görünüyor. Number.isInteger(0) doğru olsa da.

Örnek vermek için oluşturduğum bir keman. Filtrelenen dizi, bir değil iki değere sahip olmalıdır.

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

cevap

8

0 f 0 esas olarak yanlış iade edilecektir f dönen JavaScript bir Falsey değer olduğundan. Filtre neyse doğru veya yanlış döndüren bir işlev istiyor beri

arr.filter(Number.isInteger) 

tek ihtiyacınız olmalıdır. senin .filter() işlev içinde

2

açıklamada truthy/Falsey evrende true olan 3, 0, undefined, false, false dönüyor. Bu, .filter() işlevinden dönüşün [3] olduğunu gösterir.

aşağıdaki tüm tamsayı değerleri kullanmak dönmek isterseniz:

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

Bu .filter() işlevinden [3,0] dönecektir.

1

Array.filter, dizideki her öğenin belirli bir işlevini çalıştırır ve işlevin doğru veya yanlış döndüğüne bağlı olarak onu koruyacağına veya atamayacağına karar verir. Numarayı kendi başınıza döndürmene gerek yok.

Numarayı döndürdüğünüzde, 0.sayısını döndürerek sonlandırırsınız, hangi array.filter "false" olarak algılar ve onu içermez.

Number.isInteger() kendi başına bir doğru veya yanlış döndürdüğünden, yalnızca kendi başınıza kullanın.

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