我有基于某些条件删除某些元素的数组,当我删除元素时我重启for循环因为索引被刷新。
var k;
for( k=0 ; k < this.j_data.length;k++){
if(condition === true){
this.j_data.splice(k, 1);
k = 0; // restart
}
}
我的数组this.j_data有两个元素都应该被splice删除但是在删除第一个元素后,最后一个元素被循环跳过。
任何想法缺少什么
答案 0 :(得分:0)
这样你得到了lask k,因为当k = 1时它会停止循环
var k;
for( k=0 ; k <= this.j_data.length;k++){
if(condition === true){
this.j_data.splice(k, 1);
}
}
答案 1 :(得分:0)
感谢@Jaromanda X
首先发生k ++,因此k = -1解决问题
var k;
for( k=0 ; k < this.j_data.length;k++){
if(condition === true){
this.j_data.splice(k, 1);
k = -1; // restart
}
}
答案 2 :(得分:0)
for
循环总是在迭代后递增索引,因此当您在下一次迭代中设置k=0
时,它将被设置为1
,因此您永远不会删除pos中的元素&#34; 1&#34; (数组的第二个元素)。
我认为你应该使用一种不同的循环,do/while
,以便在循环内执行代码块后测试条件,参见:
var arr = [1,2,3,4,5];
console.log("Before: " + arr);
(function(j_data, condition){
var k=0;
do {
if(condition === true){
j_data.splice(k, 1);
k = 0; // restart
}else{
k++;
}
} while(k < j_data.length);
})(arr, true);
console.log("After: " + arr);
&#13;