# Iterate Through Can't get empty array

I don’t see why i can’t get 4th check and my answer is 1,6,3,19,3,9 instead of empty array. I see pattern that only arrays with first number matched with element was deleted but i used indexOf method so i didn’t expect that. Can you give me a clue?

``````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]], 3));
``````

not sure if you want to just filter the number as is, or return a single array without the number

short way - map() main array then filter() or `map()` nested arrays

long way -

loop though main array

loop through each nested array

if item `!==` elem, then push to new array (or splice to remove)

I can’t use map and filter. It is Basic Data Structures: Iterate Through All an Array’s Items Using For Loops task

``````for (let i = 0; i < arr.length; i++) {
...
arr.splice(i, 1);
...
``````

You are taking elements from the array while you’re looping through it. The last test doesn’t pass because after the second iteration, the `arr` contains only two elements and `i` is already 2, so `i < arr.length` doesn’t pass and you break out of the loop.

To solve this I’d invert your logic, instead of checking if the element exists in the array and then removing the sub-array, I’d check if the element doesn’t exist in the array like `arr[i].indexOf(elem) === -1` and then `push` the sub-array into `newArr`.

1 Like

Thanks for clear explanation, now it worked