从数组中过滤NaN

时间:2016-08-17 21:10:02

标签: javascript function filter undefined nan

我试图从数组中删除所有虚假值。

我知道这可能不是这个问题的最佳解决方案,但考虑到我想使用这个开关,有没有办法去除NaN?

function bouncer(arr) {
    arr=arr.filter(removeFalsy);
  return arr;
}

function removeFalsy(val){
    switch(val){
        case false: return false;
        case null: return false;
        case 0: return false;
        case "" :return false;
        case undefined: return false;
        case NaN: return false; // <=== NaN 
        default: return true;
    }
}

bouncer([false, null, 0, NaN, undefined, ""]);
//result is: [ NaN ]

bouncer([1, null, NaN, 2, undefined]);
//result is: [ 1, NaN, 2 ]

3 个答案:

答案 0 :(得分:6)

有时你只需要保持简单:

&#13;
&#13;
function bouncer(arr) {
  return arr.filter(Boolean);
}

console.log(bouncer([false, null, 0, NaN, undefined, ""]));
console.log(bouncer([1, null, NaN, 2, undefined]));
&#13;
&#13;
&#13;

答案 1 :(得分:4)

NaN不等于任何内容,因此您需要使用Number.isNaN。 正如评论中所解释的那样,全球isNaN不是一个好主意。

感谢你指出这一点。

有关示例,请参阅how-do-you-have-a-nan-case-in-a-switch-statement

答案 2 :(得分:0)

  

filter()方法创建一个包含所有传递元素的新数组   由提供的函数实现的测试。

由于int ages[] = {23, 33, 18, 121, 30, 66}; falsenull0""undefined都是 Falsy 值因此,在JavaScript中,测试时它们将返回 false

NaN

只有不返回false 的值才会添加到数组中。

此问题与此question相同。