How to rank elements of an array in JavaScript

1 Answer

0 votes
/*
    FUNCTION: getRanks
    -------------------
    This function takes an array of numbers and returns an array of ranks.

    Ranking rules used (Competition Ranking):
    -----------------------------------------
    - Highest value gets rank 1
    - Equal values get the same rank
    - Next rank increases by the number of equal values

    Example:
        Values: 88, 4, 19, 4, 1, 31, 14, 1, 93, 17
        Ranks:   2, 7,  4, 7, 9,  3,  6, 9,  1,  5
*/
function getRanks(arr) {
    // Step 1: Create a sorted copy (descending)
    const sorted = [...arr].sort((a, b) => b - a);

    // Step 2: Map each value to its rank
    const rankMap = new Map();

    let rank = 1;
    for (let i = 0; i < sorted.length; i++) {
        const value = sorted[i];

        // If value not ranked yet, assign current rank
        if (!rankMap.has(value)) {
            rankMap.set(value, rank);
        }

        // Increase rank for next position
        rank++;
    }

    // Step 3: Build the ranking array using the map
    return arr.map(value => rankMap.get(value));
}

/*
    FUNCTION: printRanking
    -----------------------
    Prints the original array and its ranking.
*/
function printRanking(arr, ranks) {
    console.log("Original array:", arr);
    console.log("Ranking array :", ranks);
}


// MAIN PROGRAM
// ---------------------------------------------

const array = [88, 4, 19, 4, 1, 31, 14, 1, 93, 17];

// Compute ranks
const rankingArray = getRanks(array);

printRanking(array, rankingArray);



/*
run:

Original array: [
  88,  4, 19,  4,  1, 31, 14,  1, 93, 17
]
Ranking array : [
  2, 7, 4, 7, 9, 3, 6, 9, 1, 5
]

*/

 



answered 2 days ago by avibootz
...