Array Difference Filter vs Map (v2)

Revision 2 of this benchmark created on


Setup

var one = ['goog-foo-bar'];
    var two = ['goog-foo-baz'];
    
    function diffIter(a, b) {
      return a.filter(function(value) {
         return b.indexOf(value) == -1;
      });
    }
    
    function diffIter2(a, b) {
      var result = [];
      var length = a.length;
      for (var i = 0; i < length; ++i) {
         if (b.indexOf(a[i]) == -1) {
           result.push(a[i]);
         }
      }
      return result;
    }
    
    function diffMap(a, b) {
      var length = a.length;
      var map = {};
      for (var i = 0; i < length; ++i) {
        map[a[i]] = true;
      }
      length = b.length;
      for (var i = 0; i < length; ++i) {
        delete map[b[i]];
      }
      return Object.keys(map);
    }
    
    
    function diffMap2(a, b) {
      var map = {};
      var length = b.length;
      for (var i = 0; i < length; ++i) {
        map[b[i]] = true;
      }
      return a.filter(function(value) { return !map[value] });
    }
    
    
    function diffMap3(a, b) {
      var result = [];
      var map = {};
      var length = b.length;
      for (var i = 0; i < length; ++i) {
        map[b[i]] = true;
      }
      length = a.length;
      for (var i = 0; i < length; ++i) {
        if (!map[a[i]]) {
          result.push(a[i]);
        }
      }
      return result;
    }

Test runner

Ready to run.

Testing in
TestOps/sec
Iter
diffIter(one,two);
diffIter(two,one);
ready
Map
diffMap(one,two);
diffMap(two,one);
ready
Map 2
diffMap2(one,two);
diffMap2(two,one);
ready
Map 3
diffMap3(one,two);
diffMap3(two,one);
ready
Iter 2
diffIter2(one,two);
diffIter2(two,one);
ready

Revisions

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