jQuery array intersect vs native v3

JavaScript performance comparison

Revision 5 of this test case created by -

Preparation code

<script src="//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js">
</script>
<script src="//cdnjs.cloudflare.com/ajax/libs/lodash.js/1.2.1/lodash.min.js">
</script>
<script>
Benchmark.prototype.setup = function() {
    var alpha = [1, 2, 3, 4, 5, 6],
        beta = [4, 5, 6, 7, 8, 9],
        result = [];
};
</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
jQuery
$.arrayIntersect = function(a, b) {
  return $.grep(a, function(i) {
    return $.inArray(i, b) > -1;
  });
};

result = $.arrayIntersect(alpha, beta);
pending…
Native
function arrayIntersect(a, b) {
  return a.filter(function(i) {
    return b.indexOf(i) > -1;
  });
}

result = arrayIntersect(alpha, beta);
pending…
Native reduce
Array.prototype.intersect_safe = function(b) {
  var ai = 0,
      bi = 0;
  var result = new Array();

  while (ai < this.length && bi < b.length) {
    if (this[ai] < b[bi]) {
      ai++;
    } else if (this[ai] > b[bi]) {
      bi++;
    } else /* they're equal */
    {
      result.push(this[ai]);
      ai++;
      bi++;
    }
  }
  return result;
}
pending…
Kistner/Refinery
Array.prototype.intersect = function(a2) {
  var a1 = this;
  if (!a2) return a1;

  var len2 = a2.length;

  if (len2 < a1.length) {
    var c = a2,
        a2 = a1,
        a1 = c,
        c = null,
        len2 = a2.length;
  }
  for (var i = 0; i < a1.length; i++) {
    var src = a1[i],
        found = false,
        src;
    for (var j = 0;
    (j < len2) && (src >= (src2 = a2[j])); j++) if (src2 == src) {
      found = true;
      break;
    }
    if (!found) a1.splice(i--, 1);
  }
  return a1;
};
pending…
lodash
result = _.intersection(alpha, beta);
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