How to generate 7 random numbers out of 33 (1-33) in JavaScript

1 Answer

0 votes
/**
 * Generates a specified number of unique random numbers
 * from the range 1..maxNumber.
 *
 * @param {number} count - Number of values to generate.
 * @param {number} maxNumber - Maximum value in the range.
 * @returns {number[]} Array of unique random numbers.
 */
function generateRandomNumbers(count, maxNumber) {
    if (count < 1) {
        throw new Error("count must be greater than 0");
    }

    if (count > maxNumber) {
        throw new Error("count cannot be greater than maxNumber");
    }

    // Create array: [1, 2, 3, ..., maxNumber]
    const numbers = Array.from(
        { length: maxNumber },
        (_, i) => i + 1
    );

    // Fisher-Yates shuffle
    for (let i = numbers.length - 1; i > 0; i--) {
        const j = Math.floor(Math.random() * (i + 1));

        // Swap elements
        [numbers[i], numbers[j]] = [numbers[j], numbers[i]];
    }

    // Return the first 'count' numbers
    return numbers.slice(0, count);
}

// Example usage
const picks = generateRandomNumbers(7, 33);

// Optional
picks.sort((a, b) => a - b);

console.log("Random numbers:", picks);


/*
run:

Random numbers: [
   2,  6,  9, 15,
  26, 27, 30
]

*/

 



answered Oct 28 by avibootz
...