Why didn't This code work

I have a question about my code for the challenge “Basic Data Structures - Iterate Through All an Array’s Items Using For Loops”
I saw the solution and understood it, but I want to know why my “own solution” didn’t work because it seems logical to me.
here is my code :

  **Your code so far**
function filteredArray(arr, elem) {
let newArr = [...arr];
// Only change code below this line
for (let i=0;  i<arr.length; i++) {
for (let j =0 ; j<arr[i].length; j++) {
if (arr[i][j]===elem) {newArr.splice(i,1);}
}
}
// Only change code above this line
return newArr;
}

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 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36

Challenge: Basic Data Structures - Iterate Through All an Array’s Items Using For Loops

Link to the challenge:

you are mutating newarr inside the loops. With that, all indexes of newarr are shifting, changing

logic of your loops, however, connected to arr, not to newarr

So that’s why it’s all not working as expected

I added some logging to your code. With that you will see that indexes are messed up with this mutations

function filteredArray(arr, elem) {
let newArr = [...arr];
console.log(newArr);
// Only change code below this line
for (let i=0;  i<arr.length; i++) {
for (let j =0 ; j<arr[i].length; j++) {
  console.log('before splice', i, j, newArr);
if (arr[i][j]===elem) {newArr.splice(i,1);}
  console.log('after splice', i, j, newArr);
  console.log('--------------')
}
}
// Only change code above this line
return newArr;
}

console.log(filteredArray([[3, 2, 3], [1, 6, 3], [3, 13, 26], [19, 3, 9]], 3));
1 Like

This topic was automatically closed 182 days after the last reply. New replies are no longer allowed.