Skip to main content

For loop Variations in javascript


In this website there are a list of for loop variations. I can understand the usage of for(var i=0, len=arr.length; i<len ;i++) loop (where arr is an array), since the arr.length isnt calculated every step there is marginal performance gain. However what are the advantages of using the other variants? For instance loops like




  1. for (var i=arr.length; i--;)


  2. for (var i=0, each; each = arr[i]; i++)



Are there any noticeable changes in performance by using different for loop variations? I generally use for(var i=0, len=arr.length; i<len ;i++) even for very big arrays. So I just want to know if there is something I am missing out here.


Source: Tips4allCCNA FINAL EXAM

Comments

  1. It is widely considered that a reversed while loop

    var loop = arr.length;
    while( loop-- ) {
    }


    is the fastest loop-type available in C-like languages (this also applied to ECMAscript for quite a while, but I think all up-to-date engines are pretty even on standard loops today). ( jsperf )

    Your 'variations' are actually no variations, but just different usage of the conditional statement within the for-loop (which, actually makes it a variation..doh!). Like

    1) for (var i=arr.length; i--;)

    Just uses the conditional part from the for-loop to do both, iterating and checking if i has a truthy value. As soon as i becomes 0 the loop will end.

    2) for (var i=0, each; each = arr[i]; i++)

    Here we get the element from each iteration, so we can directly access that within the loop body. This is commonly used when you are tired of always repeating arr[ n ].

    You're doing well in caching the .length property before looping. As you correctly mentioned, it is faster because we don't have to access that property in every iteration. Beyond that, it's also required sometimes in DOM scripting, when dealing with 'live structures' like HTMLCollections.

    ReplyDelete
  2. The point is when you're decrementing the iterator, you're actually comparing it to 0 rather than the length, which is faster since the "<, <=, >, >=" operators require type checks on both left and right sides of the operator to determine what comparison behaviour should be used.

    the fastest loop is: (If you don't care about the order of course)

    var i = arr.length
    while(i--)
    {
    }


    If you do care about the order, the method you're using is fine.

    ReplyDelete
  3. According to jsperf the fastest type of loop in JavaScript is

    var arr = new Array(10);
    var i = 0;
    while (i < arr.length) {
    arr[i];
    i++;
    };


    just ahead of (my default loop)

    var arr = new Array(10);
    for (var i = 0; i < arr.length; ++i) {
    arr[i];
    };


    With this being the slowest :

    var arr = new Array(10);
    arr.forEach(function(x) {
    x;
    });


    at least on Chrome 17 on OSX 10.7.3. So it seems the "default" loop is fine after all !!!

    ReplyDelete
  4. This is a poor use of a for each loop because it will fail on falsy values , breaking the loop.

    for (var i=0, each; each = arr[i]; i++)


    I also wouldn't use this loop ( even tough it may be faster... )

    for (var i=arr.length; i--;)


    It looks confusing and is less readable, you might as well write as reverse while loop then.

    ReplyDelete

Post a Comment

Popular posts from this blog

Why is this Javascript much *slower* than its jQuery equivalent?

I have a HTML list of about 500 items and a "filter" box above it. I started by using jQuery to filter the list when I typed a letter (timing code added later): $('#filter').keyup( function() { var jqStart = (new Date).getTime(); var search = $(this).val().toLowerCase(); var $list = $('ul.ablist > li'); $list.each( function() { if ( $(this).text().toLowerCase().indexOf(search) === -1 ) $(this).hide(); else $(this).show(); } ); console.log('Time: ' + ((new Date).getTime() - jqStart)); } ); However, there was a couple of seconds delay after typing each letter (particularly the first letter). So I thought it may be slightly quicker if I used plain Javascript (I read recently that jQuery's each function is particularly slow). Here's my JS equivalent: document.getElementById('filter').addEventListener( 'keyup', function () { var jsStart = (new Date).getTime()...

Is it possible to have IF statement in an Echo statement in PHP

Thanks in advance. I did look at the other questions/answers that were similar and didn't find exactly what I was looking for. I'm trying to do this, am I on the right path? echo " <div id='tabs-".$match."'> <textarea id='".$match."' name='".$match."'>". if ($COLUMN_NAME === $match) { echo $FIELD_WITH_COLUMN_NAME; } else { } ."</textarea> <script type='text/javascript'> CKEDITOR.replace( '".$match."' ); </script> </div>"; I am getting the following error message in the browser: Parse error: syntax error, unexpected T_IF Please let me know if this is the right way to go about nesting an IF statement inside an echo. Thank you.