Array.filter vs lodash.filter without bias (v8)

Revision 8 of this benchmark created by James Brown on


Description

Test performance of native filter method for arrays vs lodash filter method

Preparation HTML

<script src="//cdn.rawgit.com/lodash/lodash/54644cda79c7074ff710c73ecab7a8a91d583414/dist/lodash.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/dojo/1.10.0/dojo/dojo.js"></script>

<script src="//underscorejs.org/underscore-min.js"></script>
<script>
var underscore = _.noConflict();
</script>

Setup

var a1 = _.range(100);
    
    var a2 = _.union.apply(_, _.times(34, function() {
      return [
        { name: 'john', age: 47 },
        { name: 'jane', age: 22 },
        { name: 'bill', age: 60 }
      ];
    }));
    var dojoArray = require("dojo/_base/array");

Test runner

Ready to run.

Testing in
TestOps/sec
lodash filter
var r1 = _.filter(a1, function (n) { return n % 2 === 0; });

var r2 = _.filter(a2, function (person) { return person.age > 50; });
ready
Array.filter
var r1 = a1.filter(function (n) { return n % 2 === 0; });

var r2 = a2.filter(function (person) { return person.age > 50; });
ready
filter(fn, thisObj)
var r1 = a1.filter(function (n) { return n % 2 === 0; }, {});

var r2 = a2.filter(function (person) { return person.age > 50; }, {});
ready
dojo filter
var r1 = dojoArray.filter(a1, function (n) { return n % 2 === 0; }, {});

var r2 = dojoArray.filter(a2, function (person) { return person.age > 50; }, {});
ready
for push
var r1 = [];
for (var i = 0,l=a1.length; i<l; i++) {
  if (a1[i] % 2 === 0) r1.push(a1[i]);
}

var r2 = [];
for (var i = 0,l=a2.length; i<l; i++) {
  if (a2[i].age > 50) r2.push(a2[i]);
}
ready
underscore filter
var r1 = underscore.filter(a1, function (n) { return n % 2 === 0; });

var r2 = underscore.filter(a2, function (person) { return person.age > 50; });
ready

Revisions

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