Tell us what’s happening:
Why do I need the i-- after the if statement?
Is it because if the array is removed, all of the other items in array get moved down (-1) in the array index?
Your code so far
function filteredArray(arr, elem) {
let newArr = [...arr];
// change code below this line
for (let i = 0; i < newArr.length; i++) {
for(let j = 0; j < newArr[i].length; j++) {
if (newArr[i][j] === elem) {
newArr.splice(i,1);
i--;
break;
}
}
}
// 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.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 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/
Whenever you do something like add something or remove something to an array inside the for loop and are using the length
of that same array to determine when it ends unless you are compensating in some way for the change in length you can (especially where you keep adding!! something to it) get caught up in endless loops…
I usually (I know it’s an extra step but) clone the initial array and change it’s clone based on iterating through the original array…
{Edit}: clone your array!!
1 Like
You shouldn’t be changing the code above “change code below this line”. Rather than dumping arr
into newArr
and then mutating the array you are iterating over (which is a bad idea, and why the i--
is required), look at the example code in the challenge and observe that the new array is constructed in the loops.
2 Likes
originally I had this but I got lost on what to put in the if (arr[i][j] == elem), and what to do after
function filteredArray(arr, elem) {
let newArr = [];
// 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) {
} else {
newArr.push(arr[i]);
}
}
}
// 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));