Basic Data Structures - Iterate Through All an Array's Items Using For Loops

Tell us what’s happening:
Describe your issue in detail here.
Hi, so I am trying to use the for loops to search for ‘elem’ in each of the arrays. Using the if statement I want to then use the splice method to remove the ‘elem’ if it exists then add the ‘arr’ to the ‘newArray’ variable using the spread operator.
I keep getting the error message: “Cannot read property ‘length’ of undefined”.
What am I doing wrong?

  **Your code so far**
function filteredArray(arr, elem) 
{
let newArr = [];
// Only change code below this line
for(let i = 0;i < arr.length; i++)
{
  for(let k = 0;k < arr[i].length; k++)
  {
    if(arr[i][k] === elem)
    {
      arr.splice(arr[i],1)
      newArr = [...arr];
    }
  } 
}
// 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/104.0.0.0 Safari/537.36

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

Link to the challenge:

Hi @Radzi,
you ara changing the array structure mid-looping, thus loosing guarantees of its integrity.

Remember that splice modify the array in place, so what is happening is that effectively you initialise a loop based on the array length, but then proceed to remove elements from said array thus changing it’s lengths.

I might suggest you look for methods that remove elements from array, without changing it, like slice.

Hope this helps.

1 Like

Thank you so much, I realised that indeed the method I used changed the array’s length during iteration and that’s why it couldn’t read the length property of the varriable because it didnt exist : )

I went through a similar problem in basic algorithm scripting section and was able to solve it using similar line of thinking.