我有一个对象数组,正在对其进行迭代,然后尝试从列表中删除特定对象。
在数组上运行时,我删除了第一个索引,并且仅迭代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)
您正在遍历数组时从数组中删除索引。因此,您要处理的数组在每次迭代中都会更改。
由于您已从数组中删除了索引0,所以长度现在为2,因此它在第二次迭代时停止。
使用forEach
(例如参见Stackblitz)来代替filter
,它不会改变原始数组并返回新数组,然后您可以重新分配。
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