1.ForEach()
潜在的问题可能会导致乱序,
let arr = [1,1,2]; arr.forEach((item, index, arr) => { if (item == 1) { arr.splice(index, 1); } }); console.log(arr); // [1, 2]
因为第一次判断index=0,item= 1会将第一个元素删除;
此时数组变成[1,2] 第二次index=1 ,将会从item=2 开始查,导致漏掉了原数组中的第二个1;
2.解决方法
- filter()
应用到数组上
let arr = [1, 1, 2]
arr = arr.filter(item => {
return item != 1
})
console.log(arr) // [2]
应用到对象上
let arr = [
{
productId: 1,
productName: '电视机',
num: 20
}, {
productId: 2,
productName: '洗衣机',
num: 0
}, {
productId: 3,
productName: '冰箱',
num: 50
}, {
productId: 4,
productName: '空调',
num: 0
},
]
arr = arr.filter(item => {
return item.num != 0
})
console.log(arr)
-
for与for-in(不推荐)
4 for (var i = 0; i < arr.length; i++) { 5 if (...) { 6 arr.splice(i, 1); // 将使后面的元素依次前移,数组长度减1 7 i--; // 如果不减,将漏掉一个元素 8 } 9 }