«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как эффективно генерировать неповторяющиеся случайные числа в JavaScript?

Как эффективно генерировать неповторяющиеся случайные числа в JavaScript?

Опубликовано 8 ноября 2024 г.
Просматривать:714

How to Generate Non-Repeating Random Numbers in JavaScript Effectively?

Генерация неповторяющихся случайных чисел в JS

Генерация неповторяющихся случайных чисел в JS может быть достигнута с помощью различных методов. Первоначально подход заключался в проверке того, было ли уже создано новое сгенерированное число, путем добавления его в массив и сравнения с ним. Однако это может привести к ошибке «Превышен максимальный размер стека вызовов» из-за чрезмерных рекурсивных вызовов.

Эффективным решением является создание рандомизированного списка чисел один раз и обработка его последовательно. Этот подход устраняет необходимость в рекурсивных вызовах и гарантирует отсутствие повторений.

Вот пример использования перетасовки Фишера-Йейтса:

function shuffle(array) {
    var i = array.length,
        j = 0,
        temp;

    while (i--) {
        j = Math.floor(Math.random() * (i 1));
        temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }
    return array;
}

var ranNums = shuffle([1,2,3,4,5,6,7,8,9,10]);

Альтернативно для этой цели можно использовать генераторы:

function* shuffle(array) {
    var i = array.length;
    while (i--) {
        yield array.splice(Math.floor(Math.random() * (i 1)), 1)[0];
    }
}

var ranNums = shuffle([1,2,3,4,5,6,7,8,9,10]);

ranNums.next().value; // first random number from array
ranNums.next().value; // second random number from array
...

Эти методы обеспечивают эффективные способы генерации неповторяющихся случайных чисел в JavaScript, устраняя проблемы, связанные с чрезмерными рекурсивными вызовами.

Заявление о выпуске Эта статья перепечатана по адресу: 1729382177. В случае каких-либо нарушений, пожалуйста, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3