2017-04-24 10 views
0

コードワードで基本的なJavascript Kataの1つを実行していて、Numberプリミティブでない場合、配列内のすべてのアイテムをフィルタリングすることが課題です。NaNとの比較は期待通りに機能しませんか?

私は次のように書いた:

const list = [ '123', 123, 2, 'aasf', '1', 1 ]; 

function filter_list(l) { 

    const filteredArray = l.filter((item) => { 
    if (Number(item) !== NaN) return item; 
    }); 

    return filteredArray; 

} 

console.log(filter_list(list)); 

私はプログラミングに新しいですし、これが動作しない理由を理解することはできません。あなたの解決策は何ですか?

どうもありがとうございました

+0

'NaN!== NaN'。 – Tushar

+1

可能なDup/Related [JavaScriptで数値がNaNであることを確認する方法](// stackoverflow.com/q/2652319) – Tushar

+0

ありがとう、Tushar。簡潔で役立つ! – NoobOfNoobs

答えて

1

NaNは決してありませんNaN自身を含むものに等しいです! [Ref]

値をテストするためにisNaNを使用してください。 isNaN関数は、値がNaNであるかどうかを判断します。

const list = ['123', 123, 2, 'aasf', '1', 1]; 
 

 
function filter_list(l) { 
 

 
    const filteredArray = l.filter((item) => { 
 
    return isNaN(item); 
 
    }); 
 
    //could be written as l.filter(isNaN); 
 
    return filteredArray; 
 

 
} 
 

 
console.log(filter_list(list));

+1

ありがとう、これはそれを説明する!私は本当にあなたの助けに感謝します。 – NoobOfNoobs

0

あなたはisNaN

const list = [ '123', 123, 2, 'aasf', '1', 1 ]; 
 

 
function filter_list(l) { 
 

 
    const filteredArray = l.filter((item) => { 
 
    if (isNaN(Number(item))) return item; 
 
    }); 
 

 
    return filteredArray; 
 

 
} 
 

 
console.log(filter_list(list));

機能の必要性を使用することができます

JavaScriptで可能な他の値とは異なり、値がNaNであるかどうかを判定するために等価演算子(==と===)を使用することはできません。NaN == NaNNaN === NaNの両方がfalseに評価されるためです。したがって、isNaNの機能が必要です。

出典:isNaN

+1

サンカールありがとう!それは役に立ちます。 :) – NoobOfNoobs

+0

@NoobOfNoobsそれについて嬉しい:) – Sankar

関連する問題