La generación de números aleatorios no repetitivos en JS se puede lograr utilizando varias técnicas. Originalmente, el enfoque era verificar si un número recién generado ya se había creado agregándolo a una matriz y comparándolo con él. Sin embargo, esto puede provocar un error de "Se excedió el tamaño máximo de la pila de llamadas" debido a llamadas recursivas excesivas.
Una solución eficiente es generar una lista aleatoria de números una vez y trabajar con ella secuencialmente. Este enfoque elimina la necesidad de llamadas recursivas y garantiza que no haya repeticiones.
Aquí hay un ejemplo que utiliza 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]);
Como alternativa, se pueden utilizar generadores para este propósito:
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
...
Estas técnicas proporcionan formas eficientes de generar números aleatorios no repetidos en JavaScript, eliminando problemas relacionados con llamadas recursivas excesivas.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3