删除数组内元素 失败 有残留数据 splice删除成功 但结果不正确

删除数组内元素 失败 存在残留数据 splice 删除成功 但结果不正确

需求 : 数组中含有对象,对比值与数组中对象某元素是否相等,相等删除,不相等保留。

踩坑原因:忽略长度,如果改变了长度 可能此时的对象已经不是原本的对象; 懂得直接看解决方法;不懂得接着往下

  • 懂得直接看解决方法;不懂得接着往下
let arr:[{index:2,name:’你好’}{index:2,name:’世界’}{index:3,name:’啦啦’}{index:2,name:’看见’}]
let diff:2;
// index  == 2 删除
// index !=2 保留
  • 文章通过 forEach和for循环 进行讲解
  • 错误写法
for (let i = 0; i <= this.arr.length; i++) {
console.log(i) // 0,1 不会再执行
this.arr[i].index == diff ? this.arr.splice(i,1) :console.log(i)
}

打印结果:
在这里插入图片描述

  • 错误讲解

splice 会改变原本数组的长度 也就是 会改变角标所指向的内容

第一次执行 删除 i= 0
{index: “2”, name: “你好”} // 被删除
第二次执行完 i= 1
此时 arr[1] = {index: “3”, name: “啦啦”} //保留
第二次执行完 i= 2
{index: “2”, name: “看见”} // 被删除

故结束循环
打印结果
arr:[{index:’2’,name:’世界’},{index:’3’,name:’啦啦’}]

  • 解决办法
    在循环前新建一个临时数组 用于存储要保留的内容,只要把需要的内容push到临时数组,这是需要筛选的数组长度内容角标等都不会被改变
let temporary = [];
for (let i = 0; i <= arr.length; i++) {
arr[i].index != diff ? temporary.push(arr[i]) :                     console.log('...')
console.log(temporary);
};

打印结果
在这里插入图片描述
forEach同理

  • 解决方法二 (个人不推荐):
    手动更改 i 角标 的指向;当符合条件时删除 并将 i - 适当数量 使得 角标的指向是正常的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值