2 zzzcsd zzzcsd 于 2016.04.11 15:00 提问

循环遍历过程中,删除数组的元素?
 for(var i=0,len=arr.length; i<len; i++){
      if(符合条件){
                  arr.splice(i);
            }
}

像上面这样,在遍历过程中,删除某个元素,会存在问题,可能导致某些元素没有机会被遍历。
这个算法应该如何改进?

7个回答

showbo
showbo   Ds   Rxr 2016.04.11 15:05
  for(var i=0,len=arr.length; i<len; ){
      if(符合条件){
                  arr.splice(i);
            }
                        else i++;///////
}

或者从后面开始遍历,就不需要在程序里面控制i

 for(var i=arr.length-1;i--;i>=0)
CSDNXIAON
CSDNXIAON   2016.04.11 15:12

js数组循环遍历数组内所有元素
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

kenrry1992
kenrry1992   2016.04.11 15:16

按理说 你这个代理存在越界崩溃的问题 当移除一个元素的时候,你实际数组的arr的长度发生改变 实际遍历的次数会越界导致崩溃,
一般需删除的话我会将角标i记录至另外的数组,当循环结束后,在统一的删除

qq_18332445
qq_18332445   2016.04.11 15:23

你这问题很明显啊,先说原因,你删除第i个元素的时候,第i+1个元素就变成了第i个,当你接着访问第i+1个元素的时候,实际上已经是访问原本的第i+2个元素了,因此就漏掉了一个。
不光是有些遍历不到,到后面还有可能访问越界,我建议你还是从后往前处理吧。
如果实在想从前往后遍历,if语句里面加两行代码,变成:arr.splice(i); i--; len=arr.length;

wbjylk
wbjylk   2016.04.11 15:46

你应该先弄清楚javascript中splice()的定义和用法。

seek_knowledge_lulu
seek_knowledge_lulu   2016.04.11 17:20

你把这个要删除的元素下标,存到一个新的集合里,然后遍历这个集合,通过这个集合里的下标,去删除原集合的元素,就ok了
int i=0;
List l=new ArrayList();
for(String s:list)
{
if(s=="要删除的元素")
{
l.add(i);
i++;
}

}

//删除指定的元素
for(int n:l)
{
list.remove(n);
}

seek_knowledge_lulu
seek_knowledge_lulu   2016.04.11 17:21

我是用java写的,希望对你有帮助

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
在循环的过程中删除数组元素的问题
在js中,如果想删除一个数组中下标为index位置的元素,一般使用的方法为:array.splice(index,1);但是,如果我们在循环中想要删除一个元素,那么将会导致在删除这一位后,这一位后面元素的数组下标全体改变,那么我们如果还按照没有删除元素的时候的方法继续进行访问,那势必会出现问题。有两种解决方法:1、将需要删除的元素下标记录下来,最后一并全体删除。 删除方式如下代码,其中array为
面试题:Java中ArrayList循环遍历并删除元素的陷阱
Java中ArrayList循环遍历并删除元素的陷阱
WEB应用之: JS 数组的遍历与元素删除
一. 引子 今天遇到个问题,如何在遍历数组的同时动态地删除元素。接下来我将试图从遍历和删除两个方面做出代码解释并最终分析效率问题。 二. 遍历数组 先来看看示例数组。 var a1 = []; a1[1] = 'aa'; a1[5] = 'bb'; console.log(a1.length);//6 方式一,用6次循环遍历 a1 中仅有的两个数据,四次输出 var l1 = a1.l
遍历数组时移除数组中元素造成程序崩
今天对项目中的一个功能进行改进时,出现了程序崩溃,后来定位到bug所在处,经过一番研究,解决了。直接贴代码,如下。 错误日志:Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection was mutated while being enumerated.'
【iOS】NSMutableArray遍历删除内部元素的问题总结
NSMutableArray使用的范围非常广,一般在项目中获取数据后放进NSMutableArray中,或者在一些添加新对象或者插入数据的时候也会经常用到。我们经常遇到的一个需求是,遍历一个数组,将数组里面的元素遍历,删除掉不符合规则的数据。这里面就有几点非常需要注意,这种属于自己删除自己,一不小心就会有crash出现。比如有一个数组里面有4个元素,index分别是0,1,2,3,我们遍历的过程中,
关于swift for 循环 遍历数组删除元素的bug问题
最近做项目的时候,有个循环操作删除数组的元素刚开始是这么写的。 for (index, item) in list.enumerate() {     …… // 如果里边有删除操作,会有bug,不信你测测。一直显示数组越界 } for item in list {     …… // 如果里边要删除的话要改良 } // 改良之后的写法,亲测没问题Bug,也符合swi
stl容器在循环遍历中删除元素的方式
在实际的应用中,会碰到需要遍历容器中的元素,并且在判断某些的条件后,将某个元素从容器中清除的场景: #include #include #include #include #include #include template void del(T t, int pos) { // 测试循环遍历中的删除操作 int i = 0; for (typename T::iter
ArrayList循环遍历并删除元素的常见陷阱
在工作和学习中,经常碰到删除ArrayList里面的某个元素,看似一个很简单的问题,却很容易出bug。不妨把这个问题当做一道面试题目,我想一定能难道不少的人。今天就给大家说一下在ArrayList循环遍历并删除元素的问题。首先请看下面的例子: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
集合foreach循环和三种迭代的删除
增强for—foreach循环 * 简化数组和Collection集合的遍历 格式: for(元素数据类型 变量 : 数组或者Collection集合) { 使用变量即可,该变量就是元素 } 好处 * 简化遍历 三种迭代的能否删除 import java.util.ArrayList; import java.util.Iterator; import bean.Per
c#遍历list<>并删除某个元素
1,当我需要遍历一个泛型数组,删除其中的某些元素的时候会报错,因为循环的条件在删除元素的时候被更改。类似于for(int i=0;i 2,我们可以采用,倒序遍历的方法规避这个问题