Index of smallest (v5)

Revision 5 of this benchmark created by cel on


Description

Raymond Chen's Find the index of the smallest element in a JavaScript array

Added another method using an extra variable and less array lookups

Setup

function makeRandomArray(length) {
     var a = new Array(length);
     for (var i = 0; i < a.length; i++) {
      a[i] = Math.random();
     }
     return a;
    }
    
    var array100k = makeRandomArray(100 * 1000);
    var array200k = makeRandomArray(200 * 1000);
    var array250k = makeRandomArray(250 * 1000);
    
    function indexOfSmallestManual(a) {
     var lowest = 0;
     for (var i = 1; i < a.length; i++) {
      if (a[i] < a[lowest]) lowest = i;
     }
     return lowest;
    }
    
    function indexOfSmallestManual2(a) {
     var lowestI = 0, lowestVal = a[0];
     for (var i = 1; i < a.length; i++) {
      if (a[i] < lowestVal) {
        lowestI = i;
        lowestVal = a[i];
      }
     }
     return lowestI;
    }
    
    function indexOfSmallestReduce(a) {
     return a.reduce(function(lowest, next, index) {
                       return next < a[lowest] ? index : lowest; },
                     0);
    }
    
    function indexOfSmallestMinIndexOf(a) {
     return a.indexOf(Math.min.apply(Math, a));
    }

Test runner

Ready to run.

Testing in
TestOps/sec
manual 100k
indexOfSmallestManual(array100k);
 
ready
manual 200k
indexOfSmallestManual(array200k);
 
ready
manual 250k
indexOfSmallestManual(array250k);
 
ready
reduce 100k
indexOfSmallestReduce(array100k);
 
ready
reduce 200k
indexOfSmallestReduce(array200k);
 
ready
reduce 250k
indexOfSmallestReduce(array250k);
 
ready
min/indexOf 100k
indexOfSmallestMinIndexOf(array100k);
 
ready
min/indexOf 200k
indexOfSmallestMinIndexOf(array200k);
 
ready
min/indexOf 250k
indexOfSmallestMinIndexOf(array250k);
 
ready
manual2 100k
indexOfSmallestManual2(array100k);
ready
manual2 200k
indexOfSmallestManual2(array200k);
 
ready
manual2 250k
indexOfSmallestManual2(array250k);
 
ready

Revisions

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