Array filter performance (v11)

Revision 11 of this benchmark created on


Setup

var alpha = [1, 2, 3, 4, 5, 6];
    var f = function(i)
    {
        return i > 3;
    };
    Array.prototype.filter = function(fun /*, thisArg */)
        {
                "use strict";
    
                if (this === void 0 || this === null)
                        throw new TypeError();
    
                var t = Object(this);
                var len = t.length >>> 0;
                if (typeof fun !== "function")
                        throw new TypeError();
    
                var res = [];
                var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
                for (var i = 0; i < len; i++)
                {
                        if (i in t)
                        {
                                var val = t[i];
    
                                // NOTE: Technically this should Object.defineProperty at
                                //       the next index, as push can be affected by
                                //       properties on Object.prototype and Array.prototype.
                                //       But that method's new, and collisions should be
                                //       rare, so use the more-compatible alternative.
                                if (fun.call(thisArg, val, i, t))
                                        res.push(val);
                        }
                }
    
                return res;
        };

Test runner

Ready to run.

Testing in
TestOps/sec
Filter
var result = alpha.filter(f);
ready
Loop
function filter(a)
{
    var match = []

    for (var i = 0; i < a.length; i++)
    {
        if ( a[i] > 3 ) match.push(a[i])
    }

    return match
}

var result = filter(alpha);
ready

Revisions

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