关于数组中删除元素遇到的问题

数组中删除元素

最开始的想法是调用数组的forEach()方法,根据条件找到的index索引删除该项

问题:
当删除一个元素时,不会发生意外,就可以这样操作,但是当删除数组中多个元素时,这样就会出错了,会出现有些项删不了的情况(还有可能报错)
原因:

我们的需求是将状态为status = 0 的项删除掉:

  • 思路一:那就forEach()遍历数组,找到对应的索引进行删除
let lists = [
    { id: 1,name: "Tom", status: 0 },
    { id: 2,name: "Jack", status: 0 },
    { id: 3,name: "Any", status: 1 },
    { id: 4,name: "Lucy", status: 1 },
    { id: 5,name: "John", status: 0 }
  ];
lists.forEach((item,index) => {
    if(item.status === 0) {
        lists.splice(index,1);
    }
})
console.log(lists);

这样显然不行,因为每当删除一项,数组对应索引的值就会改变

结果如下:

过程:
index=0,时 进入删除,然后进入下一次遍历
index=1,而此时index=1 的项是{ id: 3,name: "Any", status: 1 }
那么也就是说,每当我们有需要删除的项挨在一起时,那么删除项的下一项会被忽略遍历,因为数组本身索引对应的内容改变了。
原因:这是在对本身数组做操作

  • 思路二:我想,那我就对index做一做操作吧
    然后就出现了下面的代码
lists.forEach((item,index) => {
    if(item.status === 0) {
        lists.splice(index,1);
        index --;  
    }
})

想法是:希望每删除一项,就让索引回到删除项,重新遍历

结果是: 还是和之前一样,并没有什么用(发现了好像平时我们不怎么注意的一件事,forEach方法的index我们操作是无效的)

  • 思路三:那么我们就回到原始人吧,用for循环
    那么就出现了以下代码:
for(let i=0;i<lists.length;i++) {
    if(lists[i].status === 0) {
        lists.splice(i,1);
        i--;
    }
}

然后结果就对了。

小结:虽然这是一个小问题,也算是for循环数组和forEach()方法的不同之处了。码住。以后不犯这样的错了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DiuDiu_yang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值