gpt4 book ai didi

javascript - 为什么foreach从数组中跳过一个元素

转载 作者:行者123 更新时间:2023-12-02 08:08:39 26 4
gpt4 key购买 nike

我正在尝试使用 forEach 迭代数组,并根据条件执行某些操作。

对于这个问题,我简化了条件以试图理解发生了什么。

我希望数组 b = [] 在操作之后,但事实并非如此,因为它只对元素的一半进行操作。为什么会这样?

(这并不是要从 b 中删除所有内容,只是想了解为什么它会跳过偶数索引)。

var a = [1, 2, 3, 4, 5, 6];
var b = a.slice(0);

console.log('before b = ', b); // b = [1, 2, 3, 4, 5, 6]

a.forEach(function (e) {
if (e > 0) {
b.splice(a.indexOf(e), 1);
}
});


console.log('after b = ', b); // b = [2, 4, 6]

// but I expect b = []

最佳答案

事实并非如此。它遍历每一项。问题是你对数组 b 做了什么。首先,您从中删除索引 0,即 1。所以现在 b = [2,3,4,5,6]。然后索引 1 即 3,所以 b = [2,4,5,6]。然后索引 2 即 5,所以 b = [2,4,6]。下一个索引不存在,所以最后 b = [2,4,6]

要获得预期结果,请在拼接调用中使用 b.indexOf(e)

var a = [1, 2, 3, 4, 5, 6];
var b = a.slice(0);

console.log('before b = ', b); // b = [1, 2, 3, 4, 5, 6]

a.forEach(function (e) {
if (e > 0) {
b.splice(b.indexOf(e), 1);
}
});


console.log('after b = ', b); // b = [2, 4, 6]

// but I expect b = []

关于javascript - 为什么foreach从数组中跳过一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49097576/

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