如果语句在while循环中

时间:2018-05-09 10:13:40

标签: javascript arrays

此代码将删除所有' b'数组中的元素。它确实如此,但并非完全如此。还有一个' b'代码执行后离开。为什么会这样?当我们将第三个参数设置为拼接方法来改变一个' b'元素进入另一个,它运作良好。但只有两个论点,不是。为什么呢?

let array = ['a','b','c','b','d','e','d','b','b','b','d','d'];

var i = 0;

while (i < array.length){

if (array[i] === 'b'){
    array.splice(i,1);
}
i++;
}
console.log(array);

1 个答案:

答案 0 :(得分:6)

应用splice方法时,数组为re-indexed。当从给定数组中删除一个元素时,您将跳过index

解决方案是在拼接后递减i的值。

&#13;
&#13;
let array = ['a','b','c','b','d','e','d','b','b','b','d','d'];
var i = 0;
while (i < array.length){
  if (array[i] === 'b'){
      array.splice(i,1);
      i--;
  }
  i++;
}
console.log(array);
&#13;
&#13;
&#13;

在这种情况下,我建议您使用filter方法。

&#13;
&#13;
let array = ['a','b','c','b','d','e','d','b','b','b','d','d'];
array = array.filter(elem => elem != 'b');
console.log(array);
&#13;
&#13;
&#13;