今日爬坑,代码如下:
let data = [
{
name: 'hefeng',
from: 'china',
},
{
name: 'alice',
from: 'china',
},
{
name: 'jack',
from: 'america',
},
];
data.forEach((item, index) => {
if (item.from === 'china') {
data.splice(index, 1);
}
});
console.log(data);
猜猜输出啥?[ { name: 'jack', from: 'america' } ] ?
正确输入如下:
[ { name: 'alice', from: 'china' }, { name: 'jack', from: 'america' } ]
为什么?
forEach 回调函数 中删除数组中的一项,会导致数组项往前移动,而 index 在下一次就 index++ , 这样就略过了被删除项的后一项,导致出乎意料!
解决方案: for 循环 index--
for (let index = 0; index < data.length; index++) {
if (data[index].from === 'china') {
data.splice(index, 1);
index--
}
}
或者使用链表