1

This is my code

var numbers = [14, 14, 16, 25];

for (var i = 0; i < numbers.length; i++){
if (numbers[i] === 14) 
numbers.splice(i,1)
}

I want to delete all the "14" in the array.

This method just delete one duplicate value and return the array as [14,16,25]. But I want it to be [16,25]

Frostless
  • 818
  • 1
  • 11
  • 33

1 Answers1

9

It's because you delete the entry at index 0, and move i on to 1. But the entry now at index 0 is also 14. You've skipped past it.

Either work backward, or don't increase i when you remove an entry (either of which modifies the existing array); or build an entirely new array via filter.

Going backward:

var numbers = [14, 14, 16, 25];
for (var i = numbers.length - 1; i >= 0; i--) {
  if (numbers[i] === 14) {
    numbers.splice(i,1);
  }
}
console.log(numbers);

Not increasing i when you remove an entry:

var numbers = [14, 14, 16, 25];
var i = 0;
while (i < numbers.length) {
  if (numbers[i] === 14) {
    numbers.splice(i,1);
  } else {
    ++i;
  }
}
console.log(numbers);

Creating a new array via filter:

var numbers = [14, 14, 16, 25];
numbers = numbers.filter(function(value) { return value != 14; });
console.log(numbers);
T.J. Crowder
  • 1,031,962
  • 187
  • 1,923
  • 1,875