javascriptloopsobject

Recognize the last iteration in a Javascript object


I have an object that I'm iterating

for (el in object) {
// Some work here
}

I want to know when is the last iteration, inside the iteration, so I can do

for (el in object) {
// Some work here
if (last_iteration) {
// Do something
}
}

Any straightforward way to do it?


Solution

  • You can do something like this:

    var first = true;
    var prev;
    
    for (var el in object) {
      // Some work here
      if (first) {
        first = false;
      } else {
        doSomething(prev, object[prev]);
      }
      prev = el;
    }
    
    if (prev !== undefined) { // There was at least one element
      doSomethingElse(prev, object[prev]); // Prev is now last of all elements
    }
    

    This is in case you want to process all but the last element in one way (doSomething) and process the last element in another way (doSomethingElse).

    If you want to process all the elements in one way (doSomething) and want to have extra processing for the last element only (doSomethingExtra), you can do:

    var prev;
    
    for (var el in object) {
      // Some work here
      doSomething(el, object[el]);
      prev = el;
    }
    
    if (prev !== undefined) { // There was at least one element
      doSomethingExtra(prev, object[prev]); // Prev is now last of all elements
    }
    

    To make it even shorter, you can do similar to what Török Gábor did in the gist he provided, by reusing el variable, i.e.:

    var el;
    
    for (el in object) {
      // Some work here
      doSomething(el, object[el]);
    }
    
    if (el !== undefined) { // There was at least one element
      doSomethingExtra(el, object[el]); // El is now last of all elements
    }
    

    Hope this helps.