Iterate Through All an Array's Items Using For Loops

Tell us what’s happening:

Your code so far


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

  // change code below this line
    for(var i; i < arr.length; i++){
      for(var j = 0; j < arr[i].length;j++){
        if(arr[i][j] == elem){
          arr.splice(j,1);
        }
      }
    }
  // change code above this line
  return arr;
}
// 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 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 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/

I have a problem to understand why arr[i].length is undefined?

The problem could be that you are modifiying the array while you are looping through it. Try with a small input and follow the execution of the function “by hand”, with pencil and paper, to see what is happening.

1 Like

Hi,

i is never initialized

Also @zdflower has a point. Look at the example.

Good luck

2 Likes

Here is the solution hope it may help but please try at your own first
function filteredArray(arr, elem) {
let newArr = [];
let i,j;
// change code below this line
for(i = 0; i < arr.length; i++){
for(j = 0; j < arr[i].length; j++){
if(arr[i][j] == elem)
break;
}
if(j == arr[i].length)
newArr.push(arr[i]);
}
// 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));

1 Like

hi, is my code correct till now?
i 'm “stuck” a little bit

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; j++)
{
let a=arr[j].indexOf(elem);
if(a!==-1)
{
newArr.pop(arr[i]);
}

      }

  }

// 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));

SOLUTION using filter() method:

function filteredArray(arr, elem) {
  let newArr = [];
  // change code below this line
  for (let i=0; i<arr.length; i++) {
    if (!(arr[i].filter(item => item !== elem).length < arr[i].length)) {
      newArr.push(arr[i]);
    }
  }
  // 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));