gpt4 book ai didi

javascript - Array.prototype.every 在测试数组中的空值有长度时返回 true?

转载 作者:行者123 更新时间:2023-12-03 07:20:12 24 4
gpt4 key购买 nike

我正在尝试检查数组中的每个元素是否具有真值。

但是当测试一个数组有一些空值时我很困惑。

var arr = [];
arr[10] = 1;
arr; // [empty x 10, 1];
arr.every(item => Boolean(item)); // true ???
Boolean(arr[0]); // false ???!!!

这是我在 chrome devtool 控制台上运行上面的代码时得到的结果 enter image description here

最佳答案

every , some, map, filter, 和其他大多数只访问存在的数组条目,它们不访问稀疏数组中的间隙像你的。所以结果只是基于检查实际存在的元素的值。

您可以看到,如果您单步执行回调或向其添加日志记录:

var arr = [];
arr[10] = 1;
arr.every((item, index) => {
console.log(`Visited index ${index}, item = ${item}`);
return Boolean(item);
});
// =>
// Visited index 10, item = 1


// Note that 0-9 are gaps:
console.log(`0 in arr? ${0 in arr}`); // false
console.log(`9 in arr? ${9 in arr}`); // false
console.log(`10 in arr? ${10 in arr}`); // true

如您所见,every 回调只输出一行,因为它只被调用一次。

如果您希望该数组对于元素 0 到 9 实际上具有 undefined,您可以使用 fill;然后 every 将测试元素 0 并返回 false 因为 Boolean(undefined)false:

var index = 10;
var arr = Array(index + 1).fill();
arr[index] = 1;
console.log(arr.every(Boolean)); // false

关于javascript - Array.prototype.every 在测试数组中的空值有长度时返回 true?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62809439/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com