Iterate Through All an Array's Items Using For Loops - Odd splice behavior

Hey guys, I know there’s an easier/better way to solve this challenge with push(), but I’m curious as to why this particular code is not working (it does on all but one, where it somehow manages to leave some of the nested array’s elements behind). My best guesses lead me to believe it’s because I’m mutating arr’s length during the loop, but I would think this would cause it to skip other ones as well. I’m not sure what caused it to splice part of the nested array and not the other part, when it should spice the entire thing.

Your code so far


function filteredArray(arr, elem) {
  let newArr = [];
  // change code below this line
    for (let i = 0; i < arr.length; i++) {
      if (arr[i].indexOf(elem) >= 0) {
         arr.splice(i, 1);
         console.clear();
         console.log(arr);
      }
    }
    newArr = [...arr];
    console.log(newArr);
  // change code above this line
  return newArr;
}

// change code here to test different cases:
console.log(filteredArray([[3, 2, 3], [1, 6, 3], [3, 13, 26], [19, 3, 9]], 3));

Your browser information:

User Agent is: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.87 Safari/537.36.

Link to the challenge:
https://learn.freecodecamp.org/javascript-algorithms-and-data-structures/basic-data-structures/iterate-through-all-an-arrays-items-using-for-loops

Thanks Randell!

I thought I must have been passing over some of them wit that i value, so that makes perfect sense. Thank you clarifying it for me.

As for as the newArr = .[…arr], it was something I was playing with when trying to solve the problem and I didn’t take it out before posting here. I usually try a couple of different approaches if I can think of them. Just me being sloppy :smiley: