2017-05-14 5 views
1

配列から空の値(null、undefined、 ''、NaN、false)をすべて削除する必要があります。例:[0、false、[]、未定義、{}、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は)うちは、文字列、ZEROS、または他の番号を削除するにはNaNを削除するには?

答えて

1

isNaN()!= NaNは意味を持たない、isNaNは、それが有効な番号だかいないならば、あなたはそれには何も渡していません(trueまたはfalseを返す)パラメータとチェックをとる関数です。

これを正しく使用しても、数字以外のすべての値が除外されるため、正しく動作しません。

私はこれを使用することをお勧めしたい:

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

いずれかnはtruthyあるか、それが0です。

+0

@MaxES '論理OR"は、いずれかの側が真または真実であることを意味します。もし 'n!== false!==" "!== 0!== NaN!== undefined!== null'それは真実で、' n'は 'true'と等価です。 'n === 0'の場合、' || 'の左側は' false'に等しくなりますが、右側 'n === 0'は' true'になります、 '||'は '本当の側を真とする。したがって、「n」は真実であるか、または「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です。つまり、はnNaNの場合はfalseを返します。

+0

「無限」は真実でなければなりません。私は推測する。 –

+0

'Infinity'は、比較の目的以外の数字で操作できる数字ではありません。その意味で、「無限」はほとんど常にビジネスロジックを破ります。 – arboreal84

関連する問題