Array Difference Filter vs Map

Benchmark created on


Setup

var one = ['foo', 'bar', 'baz', 'bam', 'fizzle'];
    var two = ['foo', 'slam', 'okay', 'go!', 'bam', 'fizzle'];
    
    function diffIter(a, b) {
      return a.filter(function(value) {
         return b.indexOf(value) == -1;
      });
    }
    
    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

Revisions

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