Javascript for循环跳过最后一个元素

时间:2017-04-07 09:51:16

标签: javascript

我有基于某些条件删除某些元素的数组,当我删除元素时我重启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删除但是在删除第一个元素后,最后一个元素被循环跳过。

任何想法缺少什么

3 个答案:

答案 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,以便在循环内执行代码块后测试条件,参见:

&#13;
&#13;
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;
&#13;
&#13;