forEach循环里头使用splice()遇到的坑

1、循环arr数组,将item为1的元素从数组中删除。

let arr = [1,1,2];
arr.forEach((item,index,arr) =>{
  if(item == 1 ) {
   arr.splice(index,1)
}
})
console.log(arr); //[1,2]

2、结果:循环之后打印[1,2],还有一个1无法删除。

3、原因分析:

      ①第一次forEach循环,arr是[1, 1, 2],index是0,item是1,if条件成立,使用splice删除了item1,arr变成[1, 2]
      ②第二次forEach循环,arr是[1, 2],index是1,item是2,if条件不成立,使用splice无法删除了第二个重复的1
      ③原因是使用splice容易使数组的index乱序。

解决方法

使用filter()方法筛选条件符合条件的元素,去除不符合条件的元素。

1、filter()应用到数组上(修改上面的例子,去除为1的元素)。

let arr = [1,1,2];
arr = arr.filter(item => {
    return item !=1;
})
console.log(arr); //[2]

2、filter()应用到数组对象上(去除对象数组num为0的产品)。


                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值