// create an array we can append to
const rows = [{
id: 3,
title: "sometitle",
catid: 55,
img: "file"
},
{
id: 4,
title: "sometitle",
catid: 55,
img: "file"
},
{
id: 5,
title: "sometitle",
catid: 55,
img: "file"
}
];
// hold some results
var testresult = [];
// add some objects to our array, bulk it up
for (var a = 0; a < 100000; a++) {
rows.push({
id: a,
title: "sometitle",
catid: a,
img: "file"
});
}
// go grab a group by from here: https://stackoverflow.com/a/38327540/125981
function groupBy6(list, keyGetter) {
const map = new Map();
list.forEach((item) => {
const key = keyGetter(item);
const collection = map.get(key);
if (!collection) {
map.set(key, [item]);
} else {
collection.push(item);
}
});
return map;
}
// just to make it simple, push in a result
function testResult(test, name, value1, value2) {
testresult.push({
test: test,
value: value2 - value1,
name: name
});
}
// go grab a sum function from here: https://stackoverflow.com/a/23249575/125981 (in the comments)
var sum = function(items, prop) {
if (items == null) {
return 0;
}
return items.reduce(function(a, b) {
return b[prop] == null ? a : a + b[prop];
}, 0);
};
// some super ugly tests :)
function test() {
// test
var t0 = performance.now();
newRows0 = [];
rows.forEach(function(value, index) {
let obj = {};
obj.id = value['id'];
obj.img = value['img'];
newRows0.push(obj);
});
var t1 = performance.now();
testResult("test0", "forEach", t0, t1);
var t2 = performance.now();
const newRows1 = rows.map(({
id,
img
}) => ({
id,
img
}));
var t3 = performance.now();
testResult("test1", "map arrow", t2, t3);
var t4 = performance.now();
var newRows2 = rows.map(function({
id,
img
}) {
return {
id,
img
};
});
var t5 = performance.now();
testResult("test2", "map function", t4, t5);
var t6 = performance.now();
newRows3 = [];
for (var i = rows.length; i--;) {
newRows3.push({
"id": rows[i]['id'],
"img": rows[i]['img']
});
}
var t7 = performance.now();
testResult("test3", "negative for compact", t6, t7);
var t8 = performance.now();
newRows4 = [];
for (var i = 0; i < rows.length; i++) {
newRows4.push({
"id": rows[i]['id'],
"img": rows[i]['img']
});
}
var t9 = performance.now();
testResult("test4", "for", t8, t9);
var t10 = performance.now();
newRows5 = [];
var len = rows.length;
for (var i = 0; i < len; i++) {
newRows5.push({
"id": rows[i]['id'],
"img": rows[i]['img']
});
}
var t11 = performance.now();
testResult("test5", "cached len for", t10, t11);
var t12 = performance.now();
newRows6 = [];
for (var i = rows.length - 1; i >= 0; i--) {
newRows6.push({
"id": rows[i]['id'],
"img": rows[i]['img']
});
}
var t13 = performance.now();
testResult("test6", "negative for long", t12, t13);
var t14 = performance.now();
newRows7 = [];
var i = rows.length;
while (i--) {
newRows7.push({
"id": rows[i]['id'],
"img": rows[i]['img']
});
}
var t15 = performance.now();
testResult("test7", "negative while", t14, t15);
var t16 = performance.now();
var test8 = rows.map(function(elem) {
return {
id: elem.id,
img: elem.img
};
});
var t17 = performance.now();
testResult("test8", "map accepted", t16, t17);
}
// run the test 20 times, not super great statistically speaking
for (var t = 0; t < 20; t++) {
test();
}
// get each group and sum them up in an ugly way
const groupeds = groupBy6(testresult, tst => tst.test);
var groupy = Array.from(groupeds);
groupy.forEach(function(entry) {
var s = sum(entry[1], "value");
var sn = +(s / entry[1].length).toFixed(2);
console.log(entry[0], entry[1][0].name, sn);
});