旨在从数组中删除NaN的代码仍返回NaN JS

时间:2017-05-14 09:32:02

标签: javascript arrays nan

我需要从数组中删除所有空值(null,undefined,'',NaN,false)EXCEPT 0。例如:[0,false,[],undefined,{},NaN,'Kevin'] => [0,[],{},'凯文'];

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)删除NaN而不删除字符串,ZEROS或其他数字?

2 个答案:

答案 0 :(得分:1)

isNaN()!= NaN没有意义,isNaN是一个接受参数并检查(返回truefalse)的函数,如果它是有效数字的话,你没有传递任何东西。

即使您正确使用它,它也不会起作用,因为所有非数字的值都将被过滤掉。

我建议使用这个:

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

n或者是0

答案 1 :(得分:0)

isNaN将数字作为参数。需要isNaN(n)

然后,除非您想使用无限数字,例如-InfinityInfinity,否则我建议您只需验证:

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

NaN不是有限的,所以它也会被过滤掉。 NaN还具有以下属性:任何比较都会使其返回false。这意味着如果n == nfalsen将返回NaN