gpt4 book ai didi

javascript - 在传递给 forEach 的回调中拼接一个 Javascript 数组

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

我有这段代码应该遍历数组中的每个项目,根据某些条件删除项目:

//iterate over all items in an array
//if the item is "b", remove it.

var array = ["a", "b", "c"];

array.forEach(function(item) {
if(item === "b") {
array.splice(array.indexOf(item), 1);
}

console.log(item);
});

期望的输出:
a
b
c
实际输出:
a
b
显然, native forEach 方法不会在每次迭代后检查项目是否已被删除,因此如果是,则跳过下一个项目。除了重写 forEach 方法或实现我自己的类来使用而不是数组之外,还有更好的方法吗?
编辑 - 根据我的评论,我想解决方案是只使用标准 for 循环。如果您有更好的方法,请随时回答。

最佳答案

让我们看看为什么 JavaScript 会这样。根据ECMAScript standard specification for Array.prototype.forEach ,

当您删除索引 1 处的元素时,索引 2 处的元素将成为索引 1 处的元素,并且该对象不存在索引 2。

现在,JavaScript 在对象中查找元素 2,但未找到,因此它跳过了函数调用。

这就是为什么你只看到 ab .

执行此操作的实际方法是使用 Array.prototype.filter

var array = ["a", "b", "c"];

array = array.filter(function(currentChar) {
console.log(currentChar); // a, b, c on separate lines
return currentChar !== "b";
});
console.log(array); // [ 'a', 'c' ]

关于javascript - 在传递给 forEach 的回调中拼接一个 Javascript 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21811630/

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