Check inside a loop that array has next element in Javascript/QML

12,309

Solution 1

If you want to loop through every element except the last one (which doesn't have an element after it), you should do as suggested:

for(var i = 0; i < items.length-1; ++i) {
    // items[i+1] will always exist inside this loop
}

If, however, you want to loop through every element -even the last one-, and just add a condition if there is an element after, just move that same condition inside your loop:

for(var i = 0; i < items.length; ++i) {
    // do stuff on every element
    if(i < items.length-1){
        // items[i+1] will always exist inside this condition
    }
}

if(items[i+1]) will return false (and not execute the condition) if the next element contains a falsey value like false, 0, "" (an empty String returns false).

Solution 2

Put a value check on variable i and make sure it is less than items.length-1 in order to safely access items[i+1].

for(var i = 0; i < items.length-1; ++i) {

  if(items[i+1]) {
    //do stuff 
  }

}

Solution 3

Drop the for loop and use array#forEach, and simply check whether a next value exists:

items.forEach(function (item, index) {

  if (!items[index + 1]) return;

  // do something with item and items[index + 1]
});
Share:
12,309

Related videos on Youtube

EMBEDONIX
Author by

EMBEDONIX

Protecting yourself against thrown exceptions, considered as a defensive programming practice.

Updated on October 09, 2022

Comments

  • EMBEDONIX
    EMBEDONIX over 1 year

    I have an array items. I need to make sure that in the current iteration of the loop I can safely call the next item of the array

    for(var i = 0; i < items.length; ++i) {
    
      // do some stuff with current index e.g....
      item = items[i];
    
    
       // then do something with item @ i+1
       if(items[i+1]) {
          //do stuff 
       }
    
    }
    

    Is this how it is done or if not how/what would be the better way?

    P.S. I do not want to do a bound check

    • blex
      blex almost 9 years
      The best way would be to replace i < items.length with i < items.length-1. Then, you can safely call items[i+1] inside your loop.
    • user229044
      user229044 almost 9 years
      @blex That should be an answer
  • Andres Felipe
    Andres Felipe over 3 years
    Actually, i needed to break the loop between an if and an else, your answer helps a lot because one can't break array.forEach in a goog way like the old fashion loop for does