我刚刚在使用Array.prototype.filter()时发现了这个问题,有人可以解释一下为什么吗?
我有这两个数组
[0, NaN, NaN, NaN]
[1, NaN, NaN, NaN]
当我使用Number
调用filter()时类型过滤器第一个返回是一个空数组,第二个返回是一个数组。
我认为检查0
作为Number
失败了,但为什么呢?我试图构建一个 Number
与 0
而且效果很明显。
console.log([0, NaN, NaN, NaN].filter(Number)); // []
console.log([1, NaN, NaN, NaN].filter(Number)); // [1]
// other examples
console.log([0, 1, 2, 3].filter(Number)); // [1, 2, 3]
console.log([1, 2, 3, 4].filter(Number)); // [1, 2, 3, 4]
console.log([0.1, 0.2, 0.3, 0.4].filter(Number)); // [0.1, 0.2, 0.3, 0.4]
console.log([1.1, 2.2, 3.3, 4.4].filter(Number)); // [1.1, 2.2, 3.3, 4.4]
console.log([-1, -2, -3, -4].filter(Number)); // [-1, -2, -3, -4]
提前谢谢你们。
最佳答案
The filter() method creates a new array with all elements that pass the test implemented by the provided function.
0
和 NaN
都是 falsey 值,因此它们会被过滤函数删除。
要过滤 0,您可以使用 isNaN就像下面这样
console.log([0, NaN, NaN, NaN].filter(v => !isNaN(v))); // [0]
关于javascript - 使用 Number 函数作为过滤器时数组.filter 出现意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55827991/