« Blog

Splice doesn't work very well in a JavaScript for loop

That is all. Be careful.

var numbers = [1,2,3,4,5,6,7,8,9,10];
for(var i=0; i

The problem is, when you splice inside a for loop, you're ruining the index that you're using to reference the other elements in the array. There are some really smart ways to get around this using jquery's $.grep function, but there's also a simpler way, assuming you don't need to do anything in an upward order - you can just reverse the for loop, using -- rather than ++.

Like so:

var numbers = [1,2,3,4,5,6,7,8,9,10];
for(i=numbers.length-1; i>=0;i--){
  if(numbers[i] - 5 < 0){
    numbers.splice(i,1);
  }
}

console.log(numbers);
//Logs: [5, 6, 7, 8, 9, 10] 

Because you start at the top, none of the values get upset when you start permanently deleting and shifting values across. Enjoy!


Ends: