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