如果您注意到从索引 0 开始并向上计数的 for 循环的结果并没有从数组中取出数字 23。
使用 JavaScript 循环通过 evenArray 删除所有不偶数的值
var evenArray = [1,2,3,6,22,98,45,23,22,12];
for (var i = evenArray.length - 1; i >= 0; i--) {
if(evenArray[i] % 2 != 0){
evenArray.splice(i, 1);
}
};
console.log(evenArray);
//输出到这个将是 2, 6, 22, 98, 22, 12;
var evenArray = [1,2,3,6,22,98,45,23,22,12];
for (var i = 0; i < evenArray.length; i++) {
if(evenArray[i] % 2 != 0){
evenArray.splice(i, 1);
}
};
console.log(evenArray);
//输出是 [2, 6, 22, 98, 23, 22, 12];
最佳答案
当您 splice
从数组中取出一个数字时,数组中该点之后的所有值都会向左移动。
在第二种方法中,索引 6 处的值为 45
。你发现它很奇怪,所以你拼接。现在 23、22 和 12 移动了,因此 23 现在位于索引 6。但是由于您正在向前迭代,因此您的 i++
会将您移动到索引 7,从而有效地跳过 23,这就是结果中包含 23 的原因。
当你向后迭代时,你可以避免这个问题,因为所有被移位的数字都已经被处理了。