reduce + map filter
Date tested:
4 years ago
User agent:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.80 Safari/537.36
Test name
Executions per second
reduce
3455738.0 Ops/sec
map
164271.3 Ops/sec
Benchmark definition (click to collapse):
Script Preparation code:
var customers = [ { active: true, name: "a", email: "b" }, { active: true, name: "a", email: "b" }, { active: true, name: "a", email: "b" }, { active: false, name: "a", email: "b" }, { active: false, name: "a", email: "b" }, { active: false, name: "a", email: "b" }, { active: false, name: "a", email: "b" }, { active: false, name: "a", email: "b" }, { active: false, name: "a", email: "b" }, { active: true, name: "a", email: "b" }, { active: true, name: "a", email: "b" }, { active: true, name: "a", email: "b" }, { active: false, name: "a", email: "b" }, { active: false, name: "a", email: "b" }, { active: false, name: "a", email: "b" }, { active: false, name: "a", email: "b" }, { active: false, name: "a", email: "b" }, { active: false, name: "a", email: "b" }, { active: true, name: "a", email: "b" }, { active: true, name: "a", email: "b" }, { active: true, name: "a", email: "b" }, { active: true, name: "a", email: "b" }, { active: true, name: "a", email: "b" }, { active: true, name: "a", email: "b" }, { active: true, name: "a", email: "b" }, { active: true, name: "a", email: "b" }, { active: true, name: "a", email: "b" }, { active: false, name: "a", email: "b" }, { active: false, name: "a", email: "b" }, { active: false, name: "a", email: "b" }, { active: false, name: "a", email: "b" }, { active: false, name: "a", email: "b" }, { active: false, name: "a", email: "b" } ]; Array.prototype.filterMap = function(filter) { const r = []; const len = this.length; for(let i=0; i<len; i++) { const item = filter(this[i], i, this); if (item !== undefined) { r.push(item); } } return r; };
Tests:
reduce
var emails = customers.filter( (c) => c.active) .map( (c) => ({ name: c.name, email: c.email }));
map
var emails = customers.filterMap( (c) => c.active ? { name: c.name, email: c.email } : undefined);
Open this result on MeasureThat.net