的JavaScript的forEach并不完全在指标迭代时删除索引

问题描述 投票:0回答:1

我有对象,我遍历,并试图从列表中删除特定对象的数组。

运行阵列上予移除第一索引和迭代只有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
  }
});

有没有人帮我,迭代迭代过程中完全如果去掉什么?

javascript
1个回答
2
投票

你从数组在遍历数组删除索引。所以,你正在处理的阵列被改变,在每次迭代。

既然你从数组中删除索引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
© www.soinside.com 2019 - 2024. All rights reserved.