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.

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