splice 循环删除元素

先说我遇到的问题,讲解一下原因。循环删除元素的时候坐标是对不上的

    let arr = ["Banana", "Orange", "Apple", "Orange"]
    arr.splice(2,2); // 这样没有问题的
复制代码

但是比如指定删除所有的 Orange 字段就需要循环删了,当我们删除第一个 Orange arr 的长度发生了变化已经找不到坐标是 3 的 Orange,所以 最后一个是删除不掉的,

按照逻辑上讲上述是没有问题的,但是我在查找原因的时候 arr 的长度发生变化之后循环就停止了。这个大家也可以试一下可以给我留言你们测试的结果。

逻辑讲清楚了就上代码了

  /**
* 判断一个值,是否是对象指定属性的值
* @ value 要对比的值
* @array 查找的数组对象
* @attr 要在 object 中和哪个属性的值做比较
*/
export const deleteObject = (value, array, attr) => {
let key = [];
let i = 0;
// 这一行可以忽略,是我做的容错处理
checkfiled (value, array);
array.forEach((item, index) => {
  if (!item[attr]) {
    throw 'attr 不存在 object 中'
  }
  if (item[attr] === value) {
    // 按照逻辑 我想在这里执行   array.splice(index - i, 1);   i++;
    // 但是 array 的 长度发生变化之后 退出循环了。只好记住坐标
    key.push(index)
  }
})
// 在这里单独 删除就可以了
key.forEach((j) => {
  array.splice(j-i, 1);
  i++;
})

}
复制代码

转载于:https://juejin.im/post/5be39ee5e51d4515a13fe26d

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值