使用拼接从数组中删除元素的增量/减量for循环

时间:2018-07-22 00:37:30

标签: for-loop splice

我正在尝试从数组中删除虚假元素。当我运行如下所示的增量for循环时,它仅删除索引2处的一个伪造值,而不删除索引3处的虚假值,但是当我运行递减的for循环时(如以下所示),它将删除这两个值(全部)来自数组的虚假值。为什么?在我看来,我应该以任何一种方式遍历数组。我想念什么?

function bouncer(arr) {
    for(var i=0;i<arr.length;i++){
        if(Boolean(arr[i]) === false){
           arr.splice(i,1);
        }
  }
console.log(arr);
}

bouncer([7, "ate", "", false, 9]);

function bouncer(arr) {
    for(var i=arr.length-1;i>=0;i--){
        if(Boolean(arr[i]) === false){
           arr.splice(i,1);
        }
  }
console.log(arr);
}

bouncer([7, "ate", "", false, 9]);

1 个答案:

答案 0 :(得分:0)

由于使用Splice删除了元素,因此跳过了前面的元素。 每次删除元素时,都尝试将变量减去1。

 function bouncer(arr) {
    for(var i=0;i<arr.length;i++){
        if(Boolean(arr[i]) === false){
           arr.splice(i,1);
           i--;
        }
  }
console.log(arr);
}

bouncer([7, "ate", "", false, 9]);