|
const faker = require('faker'); |
|
|
|
let a = []; |
|
let b = []; |
|
const o = {}; |
|
let toPick = []; |
|
const size = 10000; |
|
const percentageToPick = size * 0.1; |
|
|
|
console.log("Array of Objects with Reduce") |
|
console.time('aReduce'); |
|
for (let t = 0; t < size; t++) { |
|
const name = `${faker.name.lastName()} ${faker.name.firstName()}`; |
|
const age = faker.datatype.number({ max: 100 }) |
|
const pick = faker.datatype.number({ max: size }) |
|
if (pick < percentageToPick) toPick.push(name); |
|
|
|
a[t] = { name, age }; |
|
} |
|
console.log(toPick.map((name)=>a.reduce((it, el)=>{ |
|
if(el.name === name) it.push(el.age) |
|
return it |
|
}, [])).length); |
|
console.timeEnd('aReduce'); |
|
|
|
console.log("Array of Objects with Find/Map") |
|
a = [] |
|
toPick = [] |
|
console.time('aFind'); |
|
for (let t = 0; t < size; t++) { |
|
const name = `${faker.name.lastName()} ${faker.name.firstName()}`; |
|
const age = faker.datatype.number({ max: 100 }) |
|
const pick = faker.datatype.number({ max: size }) |
|
if (pick < percentageToPick) toPick.push(name); |
|
|
|
a[t] = { name, age }; |
|
} |
|
console.log(toPick.map((name)=>a.find(el=> el.name === name)).map(el=>el.age).length); |
|
console.timeEnd('aFind'); |
|
|
|
console.log("Array of Arrays with Reduce") |
|
toPick = [] |
|
console.time('bReduce'); |
|
for (let t = 0; t < size; t++) { |
|
const name = `${faker.name.lastName()} ${faker.name.firstName()}`; |
|
const age = faker.datatype.number({ max: 100 }) |
|
const pick = faker.datatype.number({ max: size }) |
|
if (pick < percentageToPick) toPick.push(name); |
|
|
|
b[t] = [name,age] |
|
} |
|
console.log(toPick.map((name)=>b.reduce((it, el)=>{ |
|
if(el[0] === name) it.push(el[1]) |
|
return it |
|
}, [])).length); |
|
console.timeEnd('bReduce'); |
|
|
|
console.log("Array of Arrays with Find/Map") |
|
b = [] |
|
toPick = [] |
|
console.time('bFind'); |
|
for (let t = 0; t < size; t++) { |
|
const name = `${faker.name.lastName()} ${faker.name.firstName()}`; |
|
const age = faker.datatype.number({ max: 100 }) |
|
const pick = faker.datatype.number({ max: size }) |
|
if (pick < percentageToPick) toPick.push(name); |
|
|
|
b[t] = [name,age] |
|
} |
|
console.log(toPick.map((name)=>b.find(el=> el[0] === name)).map(el=>el[1]).length); |
|
console.timeEnd('bFind'); |
|
|
|
console.log("Object by Key") |
|
toPick = [] |
|
console.time('o'); |
|
for (let t = 0; t < size; t++) { |
|
const name = `${faker.name.lastName()} ${faker.name.firstName()}`; |
|
const age = faker.datatype.number({ max: 100 }) |
|
const pick = faker.datatype.number({ max: size }) |
|
if (pick < percentageToPick) toPick.push(name); |
|
|
|
o[name] = age; |
|
} |
|
console.log(toPick.map(name=>o[name]).length); |
|
console.timeEnd('o'); |