Iterating through a nested array

Tell us what’s happening:
I was definitely overthinking this problem but I just want to know why doing the problem like this doesn’t work when elem === 3

Also if I created a nested for loop that searched each nested array for elem and then pushed the array to newArr when it did not find it, would that work as well?

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);
  }
}
newArr=arr;
// 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]], 19));

Your browser information:

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

Challenge: Iterate Through All an Array’s Items Using For Loops

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

splice removes items from the array, so some elements are never checked

it is bad practice and bug-prone to modify the array on which you are iterating over

1 Like

You’re mutating (modifying) your array inside the for loop, which is always a really really terrible idea.
Your code works once you address this issue.

1 Like

ok so the general rule here is use const to initialize a variable for an array I am iterating over or to simply never use the splice method on the original array.

Thank you for the answers.

const won’t solve your issue although it’s safer to declare a variable this way rather than using let unless you know beforehand that you will swap that value for something else. Your second remark is correct - never ever modify the original array that you’re working on, otherwise you’re asking for a trouble.