for(var i=0,len=arr.length; i<len; i++){
if(符合条件){
arr.splice(i);
}
}
像上面这样,在遍历过程中,删除某个元素,会存在问题,可能导致某些元素没有机会被遍历。
这个算法应该如何改进?
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)
按理说 你这个代理存在越界崩溃的问题 当移除一个元素的时候,你实际数组的arr的长度发生改变 实际遍历的次数会越界导致崩溃,
一般需删除的话我会将角标i记录至另外的数组,当循环结束后,在统一的删除
你这问题很明显啊,先说原因,你删除第i个元素的时候,第i+1个元素就变成了第i个,当你接着访问第i+1个元素的时候,实际上已经是访问原本的第i+2个元素了,因此就漏掉了一个。
不光是有些遍历不到,到后面还有可能访问越界,我建议你还是从后往前处理吧。
如果实在想从前往后遍历,if语句里面加两行代码,变成:arr.splice(i); i--; len=arr.length;
你应该先弄清楚javascript中splice()的定义和用法。
你把这个要删除的元素下标,存到一个新的集合里,然后遍历这个集合,通过这个集合里的下标,去删除原集合的元素,就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);
}
我是用java写的,希望对你有帮助