Генерация неповторяющихся случайных чисел в 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, устраняя проблемы, связанные с чрезмерными рекурсивными вызовами.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3