reduce vs for

JavaScript performance comparison

Test case created by Evan Borden

Preparation code

 
<script>
Benchmark.prototype.setup = function() {
    var data = {
      "DATA": [{
        "id": 11,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 12,
        "name": "javascript",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 13,
        "name": "jquery",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 14,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 15,
        "name": "jquery",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 16,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }, {
        "id": 20,
        "name": "ajax",
        "subject": "OR",
        "mark": 63
      }],
      "COUNT": "120"
    };
   
    function reduce(data) {
      return data.reduce(function(a, d) {
        if (a.indexOf(d.name) === -1) {
          a.push(d.name);
        }
        return a;
      }, []);
    }
   
    function unique(data) {
      var arr = [''];
      var j = 0;
      for (var i = 0; i < data.length; i++) {
        if (arr.indexOf(data[i]["name"]) === -1) {
          arr[j] = data[i]["name"];
          j++;
        }
      }
      return arr;
    }
   
    function sberry(data) {
      var temp = {}
      // Store each of the elements in an object keyed of of the name field.  If there is a collision (the name already exists) then it is just replaced with the most recent one.
      for (var i = 0; i < data.length; i++) {
        temp[data[i].name] = data[i];
      }
      // Reset the array in varjson
      var u = [];
      // Push each of the values back into the array.
      for (var o in temp) {
        u.push(temp[o]);
      }
      return data;
    }
   
    function reduceAlt(data) {
      return data.reduce(function(o, d) {
        o[d.name] = true;
        return o;
      }, {}).keys();
    }
};
</script>

Test runner

Warning! For accurate results, please disable Firebug before running the tests. (Why?)

Java applet disabled.

Testing in unknown unknown
Test Ops/sec
reduce
reduce(data.DATA);
pending…
for
unique(data.DATA);
pending…
sberry
sberry(data.DATA);
pending…
reduce alt
reduce(data.DATA)
pending…

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

Compare results of other browsers

0 comments

Add a comment