JSFiddle - React, Tailwind, and code Playground
by thinkloop
HTML
// jsperf test sparse array vs sort
JavaScript
var randomNums = [];
// randomNums
for (var h = 0; h < 999999; h++) {
randomNums.push(Math.floor((Math.random() * 99999) + 1));
}
tightArray(randomNums);
sparseArray(randomNums);
function tightArray(randomNums) {
var a = [],
sum = 0,
randomNumsLength = randomNums.length,
i, j;
console.time('tight [' + randomNumsLength + ']');
for (i = 0; i < randomNums.length; i++) {
a.push({ id: i, score: randomNums[i] });
}
a.sort(sortCompare);
for (j = 0; j < a.length; j++) {
sum += Math.round(a[j].score / 100000);
}
function sortCompare(a, b) {
return a.score - b.score;
}
console.timeEnd('tight [' + randomNumsLength + ']');
console.log('tight sum:', sum, a.slice(0, 3));
}
// sparse array
function sparseArray(randomNums) {
var a = [],
sum = 0,
randomNumsLength = randomNums.length,
randomNum,
currentA,
currentALength,
i, j, k;
console.time('sparse [' + randomNumsLength + ']');
for (i = 0; i < randomNums.length; i++) {
randomNum = randomNums[i];
if (a[randomNum] === undefined) {
a[randomNum] = [];
}
a[randomNum].push({ id: i, score: randomNums[i] });
}
for (j = 0; j < a.length; j++) {
currentA = a[j];
if (currentA !== undefined) {
currentALength = currentA.length;
for (k = 0; k < currentALength; k++) {
sum += Math.round(currentA[k].score / 100000);
}
}
}
console.timeEnd('sparse [' + randomNumsLength + ']');
console.log('sparse sum:', sum, a.slice(0, 3));
}