foreach循环中使用splice问题
- 场景:循环数组并删除不满足条件的数据。
- 问题:在foreach中使用splice(会改变原数组),会导致数组的index乱序,出现错误。
- 解决方法(之一):使用filter来代替实现相关功能。
- 例子:
let arr = [
{
productId: 1,
productName: '电视机',
num: 20
}, {
productId: 2,
productName: '洗衣机',
num: 0
}, {
productId: 3,
productName: '冰箱',
num: 50
},
]
arr = arr.filter(item => {
return item.num != 0
})
console.log(arr)
// [
// {productId: 1, productName: "电视机", num: 20},
// {productId: 3, productName: "冰箱", num: 50}
// ]
- 使用map、forEach等链式调用的方式遍历数组集合时,不要在循环体中移除数组集合的成员(不要减少数组的长度),否则数组的指针会指向错误!
参考:js关于foreach循环中使用splice问题