javascript - 使用 Number 函数作为过滤器时数组​.filter 出现意外结果

标签 javascript arrays

我刚刚在使用Array​.prototype​.filter()时发现了这个问题,有人可以解释一下为什么吗?

我有这两个数组

[0, NaN, NaN, NaN]

[1, NaN, NaN, NaN]

当我使用Number调用filter()时类型过滤器第一个返回是一个空数组,第二个返回是一个数组。

我认为检查0作为Number失败了,但为什么呢?我试图构建一个 Number0而且效果很明显。

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]

提前谢谢你们。

最佳答案

Array.filter

The filter() method creates a new array with all elements that pass the test implemented by the provided function.

0NaN 都是 falsey 值,因此它们会被过滤函数删除。

要过滤 0,您可以使用 isNaN就像下面这样

console.log([0, NaN, NaN, NaN].filter(v => !isNaN(v))); // [0]

关于javascript - 使用 Number 函数作为过滤器时数组​.filter 出现意外结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55827991/

相关文章:

javascript - 如何在轮盘赌轮中插入图像而不是文本数据

javascript - 如何判断列大小调整是手动完成还是使用 onColumnResized() 自动完成?

javascript - angularjs 在 templateUrl 中使用变量

java - 访问数组中的对象

javascript数组在另一个数组中重复

javascript - 保存 SVG,背景图像被遗漏

php - 加载页面时 session 的未定义索引错误

c - 将 3D 数组作为参数传递给 C 中的函数

javascript - 为什么我的基于 reduce 的平均函数返回 NaN?

php - 如何使用点表示法在 PHP 中展开数组