2017-04-24 36 views
0

我正在Codewars上做一個基本的Javascript Kata,挑戰是如果它們不是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 /相關信息[你如何檢查一個數字是否是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));

isNaN功能的必要性

與JavaScript中的所有其他可能值不同,不可能依賴相等運算符(==和===)來確定值是否爲NaN,因爲NaN == NaNNaN === NaN都計算爲false。因此,需要一個isNaN函數。

來源:isNaN

+1

謝謝Sankar!這有幫助。 :) – NoobOfNoobs

+0

@NoobOfNoobs很高興:) – Sankar