Trying to iterate through array using loops, "Cant read property 'length' of undefined"

Tell us what’s happening:

Your code so far


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; i++) {
      if (arr[i][j] === elem) {
        newArr.push(arr[i][j]);
      }
    }
  }
  // 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; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 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

oh such a tiny tiny mistake!

took me a bit to find it!

Look at the second for loop. The end of the for statement has i++ instead of j++
fix that and you should be good

1 Like

For some reason, the correct values are not being returned. I made sure to fix the j++

well you have a logic problem now…
your algorithm doesn’t actually filter the given array… instead what it is doing is creating a new array of all the values that are equal to elem…

After thinking about it and taking a break, I finally found a solution :
for (let i = 0; i < arr.length; i++) {
if (arr[i].indexOf(elem) === -1) {
newArr.push(arr[i]);
}
}

1 Like