2017-05-14 37 views
1

我需要從數組中除去所有空值(null,undefined,'',NaN,false)。例如:[0,false,[],undefined,{},NaN,'Kevin'] => [0,[],{},'Kevin'];設計用於從數組中刪除NaN的代碼,仍然返回NaN JS

function removeBlank(array) { 
    array = array.filter(function (n) { 
    return (n !== undefined && n !== null && n !== false && n !== "" && isNaN()!= NaN); }); 
    console.log(array); 
} 

然而,這仍然返回爲NaN。 例如 removeBlank([0, NaN, undefined, false, '', null, 'Kevin']); 回報 [0,NaN的, 「凱文」]

如何提高isNaN()!= NAN)與出消除串,零或其他數字刪除喃?

回答

1

isNaN()!= NaN已經沒有任何意義,isNaN是一個函數,它接受一個參數,並檢查(返回truefalse)如果它是一個有效的數字或沒有,你是不是傳遞到任何東西。

即使您正確使用它,它也不會起作用,因爲那麼所有不是數字的值都會被濾除。

我建議使用這樣的:

array = array.filter(function (n) { 
    return n || n === 0; 
}); 

要麼n是truthy或者是0

+0

@MaxES'logical OR',它表示任何一方都是'真實'或真實。如果'n!== false!==「」!== 0!== NaN!== undefined!== null',那麼它就是真的,然後'n'等同於'true',所以測試是可以的。如果'n === 0',那麼'||'的左邊將等於'false',但右邊的'n === 0'將是'true','||'只需要一個'真正的一面是真實的。所以無論是「真」還是等於「0」。 –

+0

@MaxES這裏更多關於[**邏輯運算符**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators)。 –

+0

如果它是'Infinity'或'-Infinity',它將返回'true'。通常,處理無限數字是一個糟糕的主意,幾乎沒有應用程序處理它們。 – arboreal84

0

isNaN將該數字作爲參數。必須isNaN(n)

然後,除非你想用無限數量的工作,像-InfinityInfinity,我建議你只是驗證具有:

arr.filter(function (n) { 
    return isFinite(n); 
}); 

NaN不是有限的,因此也會被過濾。 NaN也有財產,任何比較將使它返回false。這意味着n == n將返回false如果nNaN

+0

'Infinity'應該是真的。我猜。 –

+0

'Infinity'不是一個數字,您可以使用其他數字進行比較以外的其他數字。從這個意義上說,「無限」幾乎總是會打破商業邏輯。 – arboreal84