为什么没有删除索引 1 处的元素?
let obj = [9, 9, 111, 9, 2, 33, 9, 4, 4, 5, 7];
obj.forEach(function(item,i,obj){
if (item == 9){
obj.splice(i, 1);
console.log(i)
}
})
console.log(obj)
输出:[9, 111, 2, 33, 4, 4, 5, 7]
为什么没有删除索引 1 处的元素?
let obj = [9, 9, 111, 9, 2, 33, 9, 4, 4, 5, 7];
obj.forEach(function(item,i,obj){
if (item == 9){
obj.splice(i, 1);
console.log(i)
}
})
console.log(obj)
输出:[9, 111, 2, 33, 4, 4, 5, 7]
问题不在于方法
splice,而通常在于循环中的删除。你删除一个元素,其他人都向左移动,其他人的索引移动。结果,例如,在删除第一个元素后,其余的都将向左移动,第二个 9 将位于索引 0 处。由于循环已经开始,因此该索引已经通过,循环将继续。结果,索引 0 处的元素被删除,但索引 1 处的元素却没有。留下来的是他。您可以通过调试轻松检查这一点(阅读此处)
通常它会很有用:如何以及通过什么方式在 Javascript 代码中查找错误?