此代码将删除所有' 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);
答案 0 :(得分:6)
应用splice
方法时,数组为re-indexed
。当从给定数组中删除一个元素时,您将跳过index
。
解决方案是在拼接后递减i
的值。
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;
在这种情况下,我建议您使用filter
方法。
let array = ['a','b','c','b','d','e','d','b','b','b','d','d'];
array = array.filter(elem => elem != 'b');
console.log(array);
&#13;