Контекст
В JavaScript мы можем генерировать случайные числа, используя Math.random(). К сожалению, эта функция генерирует только числа с плавающей точкой от 0 до 1.
На практике гораздо чаще требуется случайное целое число в заданном диапазоне. Например, генерация случайного числа от 1 до 10.
Наша пользовательская функция random() позволяет использовать именно это!
Примечание: random() включает первый параметр диапазона, но исключает второй. Например, random(1, 3) может дать нам 1 или 2, но никогда не 3. Это было сделано намеренно, чтобы соответствовать поведению Math.random, а также методам типа slice
Применение
// Get a random number between 1 and 100 random(1, 101); // 5 random(1, 101); // 36 random(1, 101); // 100 // Gets a random number between -100 and 99 random(-100, 100); // 89 random(-100, 100); // 1 random(-100, 100); // 99ja
Объяснение
Сначала мы создаем случайное число с плавающей запятой между 0..1, сгенерированное Math.random(). Затем мы применяем максимальное значение, указанное вами, перед его округлением.
Если вы никогда раньше не сталкивались с такой практикой, это может показаться удивительным!
Допустим, мы хотим получить случайное число от 0 до 5. Поскольку Math.random() дает нам случайное плавающее число от 0 до 1, мы просто умножаем результат на 5 и округляем его в меньшую сторону, чтобы получить наше случайное число:
const max = 5; // Gets a random value between 0 and 0.999999 const randomFloat = Math.random(); // Multiply it by our max, here 5. // Gets a float between 0 and 4.999999 const multiplied = randomFloat * max; // Round it up using Math.floor. // Get either 0, 1, 2, 3 or 4. const randomNumber = Math.floor(multiplied);
Теперь вы, вероятно, задаетесь вопросом, как получить минимальное значение, отличное от 0? Или число от 1 до 5?
Хитрость здесь заключается в том, чтобы получить дельту. Здесь 5–1 = 4, поэтому мы получаем случайное значение от 0 до 3,99999. Затем мы можем увеличить его на наше минимальное значение, чтобы поместить его в правильный диапазон:
const min = 1; const max = 5; // Calculate the delta const delta = max - min; // Get a random float between 0 and 0.999999 const randomFloat = Math.random(); // Multiply it by our delta, 4 // Will be between 0 and 3.999999 const multiplied = randomFloat * delta; // Round it up using Math.floor // This will give us 0, 1, 2 or 3. const roundedMultiplied = Math.floor(multiplied); // A random number to which we add the min // We will finally get 1, 2, 3 or 4. const final = roundedMultiplied + min;
Заключение
Последний фрагмент в компактном выражении:
const random = (min, max) => { return Math.floor(Math.random() * (max - min)) + min; }
Первоначально опубликовано на https://dev.to 11 июня 2023 г.