Object index vs Array search

JavaScript performance comparison

Revision 6 of this test case created

Preparation code

 
<script>
Benchmark.prototype.setup = function() {
    var obj = {'test1': {'value': 1},
    'test2': {'value': 2},
    'test3': {'value': 3},
    'test4': {'value': 4},
    'test5': {'value': 5},
    'test6': {'value': 6},
    'test7': {'value': 7},
    'test8': {'value': 8},
    'test9': {'value': 9},
    'test10': {'value': 10},
    'test11': {'value': 1},
    'test12': {'value': 2},
    'test13': {'value': 3},
    'test14': {'value': 4},
    'test15': {'value': 5},
    'test16': {'value': 6},
    'test17': {'value': 7},
    'test18': {'value': 8},
    'test19': {'value': 9},
    'test20': {'value': 10},
    'test21': {'value': 1},
    'test22': {'value': 2},
    'test23': {'value': 3},
    'test24': {'value': 4},
    'test25': {'value': 5},
    'test26': {'value': 6},
    'test27': {'value': 7},
    'test28': {'value': 8},
    'test29': {'value': 9},
    'test30': {'value': 10},
    'test31': {'value': 1},
    'test32': {'value': 2},
    'test33': {'value': 3},
    'test34': {'value': 4},
    'test35': {'value': 5},
    'test36': {'value': 6},
    'test37': {'value': 7},
    'test38': {'value': 8},
    'test39': {'value': 9},
    'test40': {'value': 10},
    'test41': {'value': 1},
    'test42': {'value': 2},
    'test43': {'value': 3},
    'test44': {'value': 4},
    'test45': {'value': 5},
    'test46': {'value': 6},
    'test47': {'value': 7},
    'test48': {'value': 8},
    'test49': {'value': 9},
    'test50': {'value': 10}
    };
    var arr = [{'name': 'test1', 'value': 1},
    {'name': 'test2', 'value': 2},
    {'name': 'test3', 'value': 3},
    {'name': 'test4', 'value': 4},
    {'name': 'test5', 'value': 5},
    {'name': 'test6', 'value': 6},
    {'name': 'test7', 'value': 7},
    {'name': 'test8', 'value': 8},
    {'name': 'test9', 'value': 9},
    {'name': 'test10', 'value': 10},
    {'name': 'test11', 'value': 1},
    {'name': 'test12', 'value': 2},
    {'name': 'test13', 'value': 3},
    {'name': 'test14', 'value': 4},
    {'name': 'test15', 'value': 5},
    {'name': 'test16', 'value': 6},
    {'name': 'test17', 'value': 7},
    {'name': 'test18', 'value': 8},
    {'name': 'test19', 'value': 9},
    {'name': 'test20', 'value': 9},
    {'name': 'test21', 'value': 1},
    {'name': 'test22', 'value': 2},
    {'name': 'test23', 'value': 3},
    {'name': 'test24', 'value': 4},
    {'name': 'test25', 'value': 5},
    {'name': 'test26', 'value': 6},
    {'name': 'test27', 'value': 7},
    {'name': 'test28', 'value': 8},
    {'name': 'test29', 'value': 9},
    {'name': 'test30', 'value': 9},
    {'name': 'test31', 'value': 1},
    {'name': 'test32', 'value': 2},
    {'name': 'test33', 'value': 3},
    {'name': 'test34', 'value': 4},
    {'name': 'test35', 'value': 5},
    {'name': 'test36', 'value': 6},
    {'name': 'test37', 'value': 7},
    {'name': 'test38', 'value': 8},
    {'name': 'test39', 'value': 9},
    {'name': 'test40', 'value': 1},
    {'name': 'test41', 'value': 1},
    {'name': 'test42', 'value': 2},
    {'name': 'test43', 'value': 3},
    {'name': 'test44', 'value': 4},
    {'name': 'test45', 'value': 5},
    {'name': 'test46', 'value': 6},
    {'name': 'test47', 'value': 7},
    {'name': 'test48', 'value': 8},
    {'name': 'test49', 'value': 9},
    {'name': 'test50', 'value': 9}
    ];
   
    function searchInArray(search){
      for(var i=0; i<arr.length; i++){
        var val = arr[i];
        if(val.name==search){
          return val.value;
        }
      }
    }
   
    function searchInArray2(search){
      if (arr.indexOf(search) > -1) {
        return arr[search]
      }
    }
   
    function searchInObject(search){
      var res = obj[search];
      if(res){
        return res.value;
      }
    }
    function searchInObject2(search){
      if(search in obj)return obj[search];
    }
   
    function searchInArrayFilter(array, name) {
        var obj = array.filter(function (data) {
            return data.name === name;
        });
        return obj[0];
    }
};
</script>

Test runner

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

Java applet disabled.

Testing in unknown unknown
Test Ops/sec
Object (exists last)
searchInObject('test50');
pending…
Array (exists last)
searchInArray('test50');

 
pending…
Object (exists first)
searchInObject('test1');
pending…
Array (exists first)
searchInArray('test1');
pending…
Object (doesn't exist)
searchInObject('testx');
pending…
Array (doesn't exist)
searchInArray('testx');
pending…
Object(exist last) in operator
searchInObject2('test50');
pending…
Object (doesn't exist) in operator
searchInObject2('testx');
pending…
Array indexOf
searchInArray2('test50');
pending…
Array middle
searchInArray('test25');
pending…
Array middle 2
searchInArray2('test25');
pending…
Array filter
searchInArrayFilter(arr, 'test50');
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