js数组map循环删除某一项导致index错乱

let arr = [ { name: "a", id: 1,type:"1" }, { name: "b", id: 2,type:"2" }, { name: "c", id: 3,type:"1" }, { name: "d", id: 4,type:"1" }, { name: "e", id: 5,type:"2" } ]

删除数组中type为1 的  也就是 name 为 a、c、d的

我一开始想的就是

arr.map((item,index)=>{

       if(item.type==="1"){

                arr.splice(index,1)

        }

})

结果arr =  [ { name: "b", id: 2,type:"2" },{ name: "d", id: 4,type:"1" }, { name: "e", id: 5,type:"2" } ]

这个如果不是有两个相连的type为1的对象的话 是没有问题的

就因为他们两个挨着

在map循环的时候 index为2时  arr[2] = { name: "c", id: 3,type:"1" } 这个删除之后 

arr = [ { name: "a", id: 1,type:"1" }, { name: "b", id: 2,type:"2" },{ name: "d", id: 4,type:"1" }, { name: "e", id: 5,type:"2" } ]

然后循环继续向下走 index为3的 就直接会跳过 现在的arr[2]

所以

我最后选择了万能的for循环

for(let i=0;i<arr.length;i++){

        if(arr[i].type==="1"){

                arr.splice(i,1)

                i--

        }

}

这样每个删除的节点都让他回到之前的索引值就解决啦

just记录一下我的踩坑分享一下hhh

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值