JS: For loop vs Array.indexOf (v138)

Revision 138 of this benchmark created by vamp on


Description

Testing speed of a standard for loop vs. Array.indexOf.

Setup

var arr = ['aaa1', 'bbbb', 'cccc', 'dddd', 'eeee', 'ffff', 'gggg', 'hhhh', 'aaaa', 'bbbb', 'cccc', 'dddd', 'eeee', 'ffff', 'gggg', 'hhhh', 'aaaa', 'bbbb', 'cccc', 'dddd', 'eeee', 'ffff', 'gggg', 'hhhh', 'aaaa', 'bbbb', 'cccc', 'dddd', 'eeee', 'ffff', 'gggg', 'hhhh', 'aaaa', 'bbbb', 'cccc', 'dddd', 'eeee', 'ffff', 'gggg', 'hhhh', 'aaaa', 'bbbb', 'cccc', 'dddd', 'eeee', 'ffff', 'gggg', 'hhhh', 'aaaa', 'bbbb', 'cccc', 'dddd', 'eeee', 'ffff', 'gggg', 'hhhh', 'aaaa', 'bbbb', 'cccc', 'dddd', 'eeee', 'ffff', 'gggg', 'hhhh', 'aaaa', 'bbbb', 'cccc', 'dddd', 'eeee', 'ffff', 'gggg', 'hhhh', 'aaaa', 'bbbb', 'cccc', 'dddd', 'eeee', 'ffff', 'gggg', 'hhhh', 'aaaa', 'bbbb', 'cccc', 'dddd', 'eeee', 'ffff', 'gggg', 'hhhh', 'aaaa', 'bbbb', 'cccc', 'dddd', 'eeee', 'ffff', 'gggg', 'hhhh', 'aaaa', 'bbbb', 'cccc', 'dddd', 'eeee', 'ffff', 'gggg', 'hhhh', 'aaaa', 'bbbb', 'cccc', 'dddd', 'eeee', 'ffff', 'gggg', 'hhhh', 'aaaa', 'bbbb', 'cccc', 'dddd', 'eeee', 'ffff', 'gggg', 'hhhh', 'aaaa', 'bbbb', 'cccc', 'dddd', 'eeee', 'ffff', 'gggg', 'hhhh', 'aaaa', 'bbbb', 'cccc', 'dddd', 'eeee', 'ffff', 'gggg', 'hhhh', 'aaaa', 'bbbb', 'cccc', 'dddd', 'eeee', 'ffff', 'gggg', 'hhhh', 'aaaa', 'bbbb', 'cccc', 'dddd', 'eeee', 'ffff', 'gggg', 'hhhh', 'aaaa', 'bbbb', 'cccc', 'dddd', 'eeee', 'ffff', 'gggg', 'hhhh', 'aaaa', 'bbbb', 'cccc', 'dddd', 'eeee', 'ffff', 'gggg', 'hhhh', 'aaaa', 'bbbb', 'cccc', 'dddd', 'eeee', 'ffff', 'gggg', 'hhhh', 'aaaa', 'bbbb', 'cccc', 'dddd', 'eeee', 'ffff', 'gggg', 'hhhh', 'aaaa', 'bbbb', 'cccc', 'dddd', 'eeee', 'ffff', 'gggg', 'hhhh', 'aaaa', 'bbbb', 'cccc', 'dddd', 'eeee', 'ffff', 'gggg', 'hhhh', 'aaaa', 'bbbb', 'cccc', 'dddd', 'eeee', 'ffff', 'gggg', 'hhhh', 'aaaa', 'bbbb', 'cccc', 'dddd', 'eeee', 'ffff', 'gggg', 'hhh2'];
    
    var forLoop = function(array, item) {
      if (array) {
        for (var i = 0, j = array.length; i < j; i++)
          if (array[i] === item)
            return i;
      }
      return -1;
    };
    
    var conditionalCheckOnce = (typeof Array.prototype.indexOf == "function") ? function(array, item) {
        return Array.prototype.indexOf.call(array, item);
      } : function(array, item) {
      if (array) {
        for (var i = 0, j = array.length; i < j; i++)
          if (array[i] === item)
            return i;
      }
      return -1;
    };
    
    var conditionalCheckEachTime = function (array, item) {
                if (typeof Array.prototype.indexOf == "function")
                    return Array.prototype.indexOf.call(array, item);
                for (var i = 0, j = array.length; i < j; i++)
                    if (array[i] === item)
                        return i;
                return -1;
            };

Test runner

Ready to run.

Testing in
TestOps/sec
For loop
forLoop(arr, "hhh2");
forLoop(arr, "hhh2xx");
ready
conditional (check once)
conditionalCheckOnce(arr, "hhh2");
conditionalCheckOnce(arr, "hhh2xx");
ready
conditional (check each time)
conditionalCheckEachTime(arr, "hhh2");
conditionalCheckEachTime(arr, "hhh2xx");
ready
native indexof
arr.indexOf("hhh2");
arr.indexOf("hhh2xx");
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.