为什么我的解决方案有效,而另一个解决方案没有?

Rya*_*lin 4 javascript arrays loops for-loop

如果您注意到从索引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);  
Run Code Online (Sandbox Code Playgroud)

//输出到此将是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);
Run Code Online (Sandbox Code Playgroud)

//输出为[2,6,22,98,23,22,12];

Dyl*_*lan 9

当你splice从数组中取出一个数字时,数组中该点之后的所有值都会向左移动.

在第二种方法中,在索引6处,值为45.你发现它是奇数,所以你拼接.现在23,22和12被转移,因此23现在在索引6处.但是因为你正在向前迭代,你i++将你移动到索引7,有效地跳过23,这就是为什么23在结果中.

当你向后迭代时,你可以避免这个问题,因为所有被移动的数字都已经被操作了.