Problem in Drop it Algorithm

Problem in Drop it Algorithm
0.0 0

#1

Hy, I have all the tests in the challenge checked except

dropElements([1, 2, 3, 4], function(n) {return n > 5;})

My code is as following:

function dropElements(arr, func) {
  // Drop them elements.m
  
  for (var i = 0; i < arr.length; i++) {
    if (func(arr[0])) break;
    arr.shift();
  }
  
  return arr;
}

This is giving me a headache, it just doesn’t make any sense.
Thanks for the help


#2

This is a good example of why you don’t want to modify an array that you are iterating over. I’m going to try to break down the sequence of events here.

  • Enter for loop for the first time:
    • arr is [1,2,3,4]
    • arr.length is 4
    • i is 0
    • 0 < 4, so execute the loop block
  • if statement:
    • arr[0] is 1
    • 1 < 5, so func returns false
  • shift
  • Second iteration of for loop:
    • arr is [2,3,4]
    • arr.length is 3
    • i is 1
    • 1 < 3, so execute the loop block
  • if statement:
    • arr[0] is 2
    • 2 < 5, so func returns false
  • shift
  • Third iteration of for loop:
    • arr is [3,4]
    • arr.length is 2
    • i is 2
    • 2 < 2 is false, so exit the loop
  • return

#3

Thank you so much, so the array’s length changes throughout the iterations, I solved the problem by changing the condition to:
arr.length !== 0
but I’ll try to avoid changing the array as I’m looping through it next time.
Thanks again.