array indexof for primitives

JavaScript performance comparison

Test case created

Info

When it comes to crossbrowser - i was asking myself which was the fastest solution to find a (primitve) value within an array.

Thought of something toString() ... well lets see

Preparation code

<script src="//ajax.googleapis.com/ajax/libs/dojo/1/dojo/dojo.xd.js"></script>
 
<script>
Benchmark.prototype.setup = function() {
    var arr = [];
    while(arr.length<500){
    arr.push(arr.length);
    }
   
    Array.prototype.ECMA_indexOf = function(searchElement /*, fromIndex */){
        "use strict";
   
        if (this === void 0 || this === null)
          throw new TypeError();
   
        var t = Object(this);
        var len = t.length >>> 0;
        if (len === 0)
          return -1;
   
        var n = 0;
        if (arguments.length > 0){
          n = Number(arguments[1]);
          if (n !== n)
                n = 0;
          else if (n !== 0 && n !== (1 / 0) && n !== -(1 / 0))
                n = (n > 0 || -1) * Math.floor(Math.abs(n));
        }
   
        if (n >= len)
          return -1;
   
        var k = n >= 0
                  ? n
                  : Math.max(len - Math.abs(n), 0);
   
        for (; k < len; k++){
          if (k in t && t[k] === searchElement)
                return k;
        }
        return -1;
    };
};
</script>

Preparation code output

Test runner

Warning! For accurate results, please disable Firebug before running the tests. (Why?)

Java applet disabled.

Testing in unknown unknown
Test Ops/sec
Array.indexOf
var find = 480;
arr.indexOf(find);
pending…
String.indexOf
var arrToStr = ","+arr,
find= ","+480;
arrToStr.indexOf(find);
pending…
simple for loop
var find = 480;
for(var i=0,l=arr.length;i<l;++i){
if(arr[i]==find){
 break;
}
}
pending…
ecma array.indexOf
var find = 480;
arr.ECMA_indexOf(find);
pending…
dojo.indexOf
var find = 480;
dojo.indexOf(arr,find);
pending…

Compare results of other browsers

Revisions

You can edit these tests or add even more tests to this page by appending /edit to the URL. Here’s a list of current revisions for this page:

0 comments

Add a comment