【问题标题】:code designed to remove NaN from array, still returns NaN JS旨在从数组中删除 NaN 的代码,仍然返回 NaN JS
【发布时间】:2017-10-13 05:30:12
【问题描述】:

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

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?

【问题讨论】:

    标签: javascript arrays nan


    【解决方案1】:

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

    而且即使你用对了,它也不会起作用,因为这样所有不是数字的值都会被过滤掉。

    我建议使用这个:

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

    n 要么是真实的,要么是 0

    【讨论】:

    • @MaxES logical OR,表示两边都是true或者truthy。如果n !== false !== "" !== 0 !== NaN !== undefined !== null 是真的,那么n 就等于true 所以测试没问题。如果n === 0,那么|| 的左侧将等价于false,但n === 0 的右侧将是true|| 只需一个true 侧为true。所以要么n 是真的,要么等于0
    • @MaxES 这里有更多关于logical operators的信息。
    • 如果是Infinity-Infinity,它将返回true。通常使用无限数是个坏主意,几乎没有应用程序处理它们。
    • @arboreal84 我不确定你在说什么?
    • @arboreal84 Infinity-Infinity 都是真实的。
    【解决方案2】:

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

    然后,除非您想使用无限数,例如 -InfinityInfinity,否则我建议您使用以下代码进行验证:

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

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

    【讨论】:

    • Infinity 应该是真实的。我猜。
    • Infinity 不是一个可以与其他数字一起操作的数字,除非是为了比较。从这个意义上说,Infinity 几乎总是会破坏业务逻辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    • 2012-07-22
    • 2021-08-06
    • 2019-07-28
    • 2013-07-11
    • 2018-12-21
    相关资源
    最近更新 更多