2016-04-24 4 views
7

インデックスの要素のリストをフィルタリングしようとしています。最初の項目が取得したい項目である可能性があります。数字の配列をフィルタリングします.0は有効な入力です

動作しません

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

を使用して0フィルタリングしようとしているようです。 Number.isInteger(0)は本当ですが。

ここに例を示すために作成したフィドルです。フィルタリングされた配列は、1つではなく2つの値を持つ必要があります。

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

答えて

8

0は、fは0が本質的にfalseを返すされているFを返すJavaScriptでfalsey値であるためです。

arr.filter(Number.isInteger) 

フィルタには、必ずtrueまたはfalseを返す関数が必要なので、必要なものをすべて指定する必要があります。あなたの.filter()関数内

2

文はtruthy/falseyの宇宙でtrueある30undefinedfalsefalseを返しています。つまり、.filter()関数からの戻り値は[3]です。

あなたはすべての整数値を返したい場合は、以下を使用します。

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

これは.filter()関数から[3,0]を返します。

1

Array.filterは、配列内の各項目に対して所定の関数を実行し、関数がtrueまたはfalseを返すかどうかに基づいて、保持するかどうかを決定します。あなた自身で番号を返す必要はありません。

番号自体を返すことで、number.Filterが「false」と認識して番号0を返してしまい、それが含まれなくなります。

Number.isInteger()はtrueまたはfalseを単独で返します。単独で使用します。

arr.filter(function (f){ 
    Number.isInteger(f); 
}) 
関連する問題