# I don't understand the solution posted by the user

I don’t understand this line of code. Can someone help explain what is going on? Check the comment after the for loops.

``````function filteredArray(arr, elem) {
let newArr = [];

for (let i = 0; i < arr.length; i++) {
//This is the part I don't understand. Why are we asigning -1 to elem? That's not removing the elem from the array, but adding it to the array as -1, right? I don't get it.
if (arr[i].indexOf(elem) == -1) {
newArr.push(arr[i]);
}
}
return newArr;
}
console.log(filteredArray([[3, 2, 3], [1, 6, 3], [3, 13, 26], [19, 3, 9]], 3));
``````

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

That’s not an assignment, it’s a comparison.
`=` is the assignment operator
`==` is the comparison operator for loose equality
`===` is the comparison operator for strict equality

So now this code:

``````(arr[i].indexOf(elem) == -1)
``````

checks if `arr[i].indexOf(elem)` is equal to `-1`

Here’s a link that explains what the `.indexOf` method returns:

1 Like

This is the assignment " Modify the function, using a `for` loop, to return a filtered version of the passed array such that any array nested within `arr` containing `elem` has been removed."

If arr contains elem(which is 3)…if this array [1,2,3] contains elem, we want to replace it with -1?

I thought the instructions say “if the number 3 is in the array (elem), remove it from arr.” In other words, we wouldn’t be removing the elem (3), it would be replaced with -1. Why does that work? Is there not a way to remove the 3 from the array?

I guess you could remove it by saying .pop(elem) if it exists in arr. But I haven’t tried that yet.

The logic doesn’t rely on removing anything from the original array that’s passed to the function. Instead, the function builds and returns a new array with all the valid subarrays. Nothing is replaced with `-1` anywhere. I’ll add comments to the solution to make it clearer:

``````function filteredArray(arr, elem) {
let newArr = [];

for (let i = 0; i < arr.length; i++) { // each step of the loop looks at one of the subarrays
if (arr[i].indexOf(elem) == -1) { // if elem is not included in the current subarray, ...
newArr.push(arr[i]); // ...push this subarray to our array of valid items
}
}
return newArr; // return the array with valid items
}
``````

That’s why the example you’ve posted returns an empty array. The loop goes through all subarrays and checks if `3` is included in them. As `3` can be found in all of them, the if-statement is never true, and nothing gets pushed to the array of valid subarrays (`newArr`).