Обновлено:
Массив случайными числами
Создать массив случайными числами в JavaScript требуется при тестировании, генерации данных и прототипировании интерфейсов. Ниже – пошаговые приёмы для разных сценариев: от простого диапазона до выборки из готового набора.
Сразу базовая формула. Метод Math.random() возвращает псевдослучайное число от 0 включительно до 1 исключительно. Чтобы получить целое значение в нужном диапазоне, результат умножают на интервал и округляют вниз через Math.floor().
Как создать массив случайными числами от 0 до max
Для заполнения массива целыми числами от 0 до заданного максимума подходит Array.from():
const count = 10;
const max = 100;
const numbers = Array.from({ length: count }, () => Math.floor(Math.random() * (max + 1)));
// [73, 8, 45, 91, 0, 66, 12, 88, 29, 54]
{ length: count } создаёт итерируемый объект с нужной длиной. Второй аргумент – функция-маппер, которая вызывается для каждой позиции.
Альтернатива на основе map():
const numbers = [...Array(10)].map(() => Math.floor(Math.random() * 51));
Оператор spread превращает псевдомассив из 10 пустых слотов в настоящий массив. Без spread метод map() проигнорирует неинициализированные элементы.
Как задать диапазон с минимальным и максимальным значением
Если нужен массив случайными числами в диапазоне от -50 до 50 или от 10 до 20, используйте смещение:
const min = -50;
const max = 50;
const count = 10;
const numbers = Array.from(
{ length: count },
() => Math.floor(Math.random() * (max - min + 1)) + min
);
Формула (max - min + 1) задаёт количество возможных целых значений в интервале. Добавление min сдвигает результат к нужному отрезку. Для дробных чисел уберите Math.floor():
const floatNumbers = Array.from({ length: 5 }, () => Math.random() * (max - min) + min);
Как выбрать случайный элемент из существующего массива?
Иногда задача обратная: не создать числа, а достать случайное значение из готового списка. Генерируйте индекс через Math.random() и длину массива:
const arr = [12, 45, 67, 89, 34];
const random = arr[Math.floor(Math.random() * arr.length)];
// 67
При работе с Lodash или Underscore используйте _.sample(arr) для одного элемента или _.sampleSize(arr, n) для нескольких. Второй метод исключает повторы: каждый элемент выбирается не более одного раза techiedelight.com.
Классический цикл for и производительность
На массивах из миллионов элементов классический for работает немного быстрее функциональных методов, хотя разница в современных движках не критична. Пример с явным диапазоном:
const length = 1000;
const min = 1;
const max = 100;
const numbers = new Array(length);
for (let i = 0; i < length; i += 1) {
numbers[i] = Math.floor(Math.random() * (max - min + 1)) + min;
}
Этот подход даёт полный контроль: можно внедрить проверку уникальности или собирать статистику прямо внутри итерации ru.hexlet.io.
Генерация массива уникальных случайных чисел
Стандартный Math.random() допускает повторы. Чтобы получить массив без дублей, используйте Set:
const unique = new Set();
const min = 1;
const max = 1000;
const count = 100;
while (unique.size < count) {
unique.add(Math.floor(Math.random() * (max - min + 1)) + min);
}
const numbers = [...unique];
Set автоматически отбрасывает одинаковые значения. Цикл продолжается, пока коллекция не наберёт нужный размер. Учитывайте: если диапазон (max - min) меньше требуемого count, цикл уйдёт в бесконечность.
Часто задаваемые вопросы
Как создать массив случайными числами без повторений?
Используйте цикл while и объект Set. Генерируйте числа через Math.random(), добавляйте в Set до тех пор, пока его размер не станет равным нужной длине массива, затем преобразуйте в массив оператором spread.
Почему в коде используется Math.floor, а не Math.round?
Math.floor даёт равномерное распределение. Math.round сдвигает вероятность получения крайних значений min и max, потому что округляет с двух сторон.
Можно ли заполнить массив случайными числами дробной длины?
Да. Уберите Math.floor и умножайте Math.random() на необходимый диапазон. Если нужно округлить до определённого знака, примените toFixed() или математическое округление.
Как выбрать несколько случайных элементов из массива?
В чистом JS перемешайте массив алгоритмом Фишера-Йетса и возьмите первые N элементов. В Lodash используйте метод _.sampleSize(array, n).
Что быстрее: Array.from или цикл for?
На современных движках V8 разница в долях миллисекунд для массивов до 100 000 элементов. Цикл for немного быстрее при миллионах итераций, но Array.from короче и читабельнее.
Похожие калькуляторы и статьи
- Random случайные числа онлайн – генератор и примеры
- Случайное число от 0: формулы и генератор на JavaScript
- Заполнить случайными числами: онлайн и в коде
- Случайное натуральное число: генерация и формулы
- Рандомный код: генерация случайных чисел в JavaScript
- Найти случайные числа – онлайн генератор и формулы