Basic Data Structures: Iterate Through All an Array's Items Using For Loops pop() and shift(), which one

Tell us what’s happening:
Everything went well with the challenge until it turns out that what should be wrong (according to me) is right and what should be right is wrong.

Could someone explain to me why this code is right?

Your code so far


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.pop();
  }else{
    newArr.push([...arr[i]]);
    //newArr[i] = newArr.push([...arr[i]]);  
  }
  
}

// change code above this line
return newArr;
}

// change code here to test different cases:
console.log(filteredArray([ ["trumpets", 2], ["flutes", 4], ["saxophones", 2] ], 2));

And why this one is wrong:


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.shift();
  }else{
    newArr.push([...arr[i]]);
    //newArr[i] = newArr.push([...arr[i]]);  
  }
  
}

// change code above this line
return newArr;
}

// change code here to test different cases:
console.log(filteredArray([ ["trumpets", 2], ["flutes", 4], ["saxophones", 2] ], 2));

I appreciate your help, thank you.

Your browser information:

User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36.

Challenge: Iterate Through All an Array’s Items Using For Loops

Link to the challenge:
https://www.freecodecamp.org/learn/javascript-algorithms-and-data-structures/basic-data-structures/iterate-through-all-an-arrays-items-using-for-loops

my guess is that shift() is failing is because its changing the length of the original array by removing an element from the start so the iteration has changed.

you actually dont need any pop() or shift() they are not doing anything, if you removed them from the if statement it would still pass because the else statement is doing the job that you need, so if you changed the if statement to < 0 instead of >= 0 which is what the else is doing, it would pass just the same like so…

for(let i = 0; i < arr.length; i++){
  if(arr[i].indexOf(elem) < 0){
    newArr.push(arr[i]);
  }
}

2 Likes