http://stackoverflow.com/a/9229821/989121 (v5)

Revision 5 of this benchmark created by Jens Duttke on


Description

This edit changes

Setup

function uniq_filter_has_op(a) {
      var seen = {};
      return a.filter(function(item) {
        return seen.hasOwnProperty(item) ? false : (seen[item] = true);
      });
    }
    
    function uniq_filter_in(a) {
      var seen = {};
      return a.filter(function(item) {
        return seen[item] === 1 ? 0 : (seen[item] = 1);
      });
    }
    
    function uniq_loop_has_op(a) {
      var seen = {};
      var out = [];
      var len = a.length;
      for (var i = 0; i < len; i++) {
        var item = a[i];
        if (!seen.hasOwnProperty(item)) {
          seen[item] = true;
          out.push(item);
        }
      }
      return out;
    }
    
    function uniq_loop_in(a) {
      var seen = {};
      var out = [];
      var len = a.length;
      for (var i = 0; i < len; i++) {
        var item = a[i];
        if (seen[item] !== 1) {
          seen[item] = 1;
          out.push(item);
        }
      }
      return out;
    }
    
    function uniq_loop_in_nopush(a) {
      var seen = {};
      var out = [];
      var len = a.length;
      var j = 0;
      for (var i = 0; i < len; i++) {
        var item = a[i];
        if (seen[item] !== 1) {
          seen[item] = 1;
          out[j++] = item;
        }
      }
      return out;
    }
    
    function es6_set(a) {
      return new Set(a);
    }
    
    function uniq_loop_in_nopush_reverse_indexOf(a) {
      var item, i = a.length,
        out = [],
        j = 0;
      while (--i) {
        item = a[i];
        if (a.indexOf(item) === i) {
          out[j++] = item;
        }
      }
      out[j++] = a[0];
      return out.reverse();
    }
    //
    
    a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
    a = a.concat(a, a);
    a = a.concat(a, a);
    a = a.concat(a, a);

Test runner

Ready to run.

Testing in
TestOps/sec
uniq_filter_has_op
uniq_filter_has_op(a);
ready
uniq_filter_in
uniq_filter_in(a);
ready
uniq_loop_has_op
uniq_loop_has_op(a);
ready
uniq_loop_in
uniq_loop_in(a);
ready
uniq_loop_in_nopush
uniq_loop_in_nopush(a);
ready
ES6 Set
es6_set(a);
ready
uniq_loop_in_nopush_reverse_indexOf
uniq_loop_in_nopush_reverse_indexOf(a);
ready

Revisions

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