Why does my solution work, and this other solution does not?

If you notice the result of a for loop that starts at index 0 and the count does not take number 23 for the array.

Using JavaScript Loop through evenArray, removing all values ​​that aren't even

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);  

// output to this will be 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);

// output [2, 6, 22, 98, 23, 22, 12];

+4
source share
3 answers

When you are a splicenumber from an array, all values ​​after this point in the array are shifted to the left.

, 6, 45. , . 23, 22 12 , 23 6. , i++ 7, 23, 23 .

, , .

+9

, , .

, , :

var evenArray = [1,2,3,6,22,98,45,23,22,12];

evenArray = evenArray.filter(function(val) { return val % 2 == 0; });

console.log(evenArray);
Hide result
+3

Just adding one unit to the code:

var evenArray = [1,2,3,6,22,98,45,23,22,12];
for (var i = 0; i < evenArray.length; i++) {
    console.log("index:"+i+" value:"+evenArray[i])
    if(evenArray[i] % 2 != 0){
        evenArray.splice(i, 1);
    }
}

The output is as follows:

index:0 value:1
index:1 value:3
index:2 value:22
index:3 value:98
index:4 value:45
index:5 value:22
index:6 value:12

Compare with the original array, it cuts. The reason is that it splicedynamically cuts your array, so the index changes after the union, the value is 23the beginning index 7, but after the splice it moves to the index6

[1,2,3,6,22,98,45,23,22,12];
0
source

All Articles