博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
splice 循环删除元素
阅读量:6857 次
发布时间:2019-06-26

本文共 854 字,大约阅读时间需要 2 分钟。

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

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

你可能感兴趣的文章
重载(初学)
查看>>
《陶哲轩实分析》——给读者的一点建议
查看>>
python IO编程-StringIO和BytesIO
查看>>
线程同步中的锁
查看>>
Ubuntu 14.04安装Matlab 2013b
查看>>
【百度地图API】如何制作“从这里出发”“到这里去”——公交篇
查看>>
服务器请求
查看>>
java实现屏幕截屏功能
查看>>
实验四--恶意代码技术
查看>>
Golang 并发简介
查看>>
操作系统的启动(以Linux为例)
查看>>
课后作业
查看>>
laravel ORM 命令2
查看>>
java笔记javaweb部分
查看>>
浏览器插件 - 通用注入模版JS
查看>>
android布局学习
查看>>
js中createlement和creatTextnode属性
查看>>
DL4NLP——词表示模型(二)基于神经网络的模型:NPLM;word2vec(CBOW/Skip-gram)...
查看>>
David Freedman统计学书评
查看>>
[转]Becoming a JavaScript ninja
查看>>