/**
To see the benchmarks, open dev tools and watch the console. Then click "run with JS" in the JSBIN output
panel.
**/
// setups... not benchmarked.
var sampleSize = 2000;
var string = "";
var j = 0;
var listof1000s = loopForRange(sampleSize);
var listof1000s2 = loopAnonRangeCB(sampleSize / 2, function(i, r) {
return r.push(i), r;
});
var results = [];
function noop(i, context) {
j++;
results.push(i + 1);
}
function loopForRange(range) {
var results = [];
for (let i = 0; i < range; i++)
results[i] = i;
return results;
}
function loopAnonRangeCB(times, cb, loop, i = 0, results = [], ) {
return (loop = function() {
if (i < times) {
cb(i++, results);
loop();
}
return results;
})(times);
}
// start of benchmarks...
/*
@user3647971 I see what you are looking for, I've made some adjustements.
*/
// First
console.time("Loop: loopForIndexed");
loopForIndexed(listof1000s, function(i){
j++;
});
console.timeEnd("Loop: loopForIndexed");
results.loopForIndexed = j;
// Next
j = 0;
console.time("Loop: loopAnonIndexed");
loopAnonIndexed(listof1000s, function(i){
j++;
});
console.timeEnd("Loop: loopAnonIndexed");
results.loopAnonIndexed = j;
// Next
j = 0;
console.time("Loop: useForEach");
useForEach(listof1000s, function(e, i, c){
j++;
});
console.timeEnd("Loop: useForEach");
results.useForEachResults = j;
// Last
j = 0;
console.time("Loop: loopForEach");
loopForEach(listof1000s, function(i){
j++;
});
console.timeEnd("Loop: loopForEach");
results.loopForEachResults = j;
// Dump generated output.
console.log(results);
// End of benchmarks...
function loopForIndexed(collection, cb) {
for (let i = 0; i < collection.length; i++) {
cb(collection[i], i, collection);
}
}
function loopAnonIndexed(collection, cb, loop, i = 0, results = [], ) {
(loop = function() {
i < collection.length ? (cb(collection[i], i++, collection), loop()) : null;
})(listof1000s);
}
function useForEach(collection, callback) {
[...collection].forEach(callback);
}
function loopForEach(collection, cb, i = 0, m = 0, loop) {
(loop = (function() {
0 < m ? loop(m, cb(m--)) : null;
}))(m = collection.length)
}