in_array vs. $.inArray vs. indexOf()

JavaScript performance comparison

Test case created by Benni

Preparation code

<script src="//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
 
<script>
Benchmark.prototype.setup = function() {
    function in_array(item,arr) {
       if(!arr) {
          return false;
       } else {
          for (var p=0;p<arr.length;p++) {
             if (item == arr[p]) {
                return true;
             }
          }
          return false;
       }
    }
   
    var arr = [1, 2, 3, 4, 5, "test", "", undefined, null, {}, true];
};
</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
$.inArray
$.inArray(5, arr);
$.inArray(50, arr);
pending…
in_array
in_array(5, arr);
in_array(50, arr);
pending…
indexOf
arr.indexOf(5);
arr.indexOf(50);
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:

2 comments

PH commented :

Since this is a speed test you should optimize the code and avoid using slow programming practises.

In the for loop you have the array length checked on every iteration, which is slow. Instead you should store the array length in a variable. This way the array length is only checked once making the loop faster and then for loop only needs to make the comparison.

Like this: var len = arr.length; and then: for (var p = 0; p < len; p++)

bumfod commented :

Since this is a speed test you should optimize the code and avoid using slow programming practises.

So please turn to Revision 7, which is well optimized.

Add a comment