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));
}