A geração de números aleatórios não repetidos em JS pode ser obtida usando várias técnicas. Originalmente, a abordagem era verificar se um número recém-gerado já havia sido criado, adicionando-o a uma matriz e comparando-o. No entanto, isso pode levar a um erro "Tamanho máximo da pilha de chamadas excedido" devido ao excesso de chamadas recursivas.
Uma solução eficiente é gerar uma lista aleatória de números uma vez e trabalhá-la sequencialmente. Essa abordagem elimina a necessidade de chamadas recursivas e garante que não haja repetições.
Aqui está um exemplo usando um Fisher-Yates Shuffle:
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]);
Alternativamente, geradores podem ser usados para esta finalidade:
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
...
Essas técnicas fornecem maneiras eficientes de gerar números aleatórios não repetidos em JavaScript, eliminando problemas relacionados ao excesso de chamadas recursivas.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3