gpt4 book ai didi

删除索引时,JavaScript forEach 不会完全迭代索引

转载 作者:行者123 更新时间:2023-12-01 01:18:14 26 4
gpt4 key购买 nike

我有一个对象数组,我正在对其进行迭代,并尝试从列表中删除特定对象。

在数组上运行时,我删除了第一个索引,并且仅迭代 2 次,而不是 3 次。

const data = [{
id: 1,
name: 'test1'
},
{
id: 2,
name: 'test2'
},
{
id: 3,
name: 'test1'
}]

data.forEach((item: any, index:any) => {
if (item.name === 'test1') {
data.splice(index, 1); // Remove one record then and it stops early
}
});

如果在迭代过程中删除了任何内容,有人可以帮助我完全迭代吗?

最佳答案

您在遍历数组时从数组中删除索引。因此,您正在处理的数组在每次迭代时都会发生更改。

由于您已从数组中删除了索引 0,因此长度现在为 2,因此它会在第二次迭代时停止。

不要使用 forEach,而是使用 filter(例如,请参阅 Stackblitz),它不会改变原始数组并返回新数组,然后您可以重新分配。

let data = [{
id: 1,
name: 'test1'
},
{
id: 2,
name: 'test2'
},
{
id: 3,
name: 'test1'
}];

console.log('BEFORE', data); // Original data

data = data.filter((item: any, index: any) => item.name !== 'test1');

console.log('AFTER', data); // Only `test2` remains now

关于删除索引时,JavaScript forEach 不会完全迭代索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54506487/

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