La génération de nombres aléatoires non répétitifs dans JS peut être réalisée à l'aide de diverses techniques. À l’origine, l’approche consistait à vérifier si un nombre nouvellement généré avait déjà été créé en l’ajoutant à un tableau et en le comparant. Cependant, cela peut entraîner une erreur « Taille maximale de la pile d'appels dépassée » en raison d'appels récursifs excessifs.
Une solution efficace consiste à générer une seule fois une liste aléatoire de numéros et à la parcourir de manière séquentielle. Cette approche élimine le besoin d'appels récursifs et garantit l'absence de répétitions.
Voici un exemple utilisant un 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]);
Alternativement, des générateurs peuvent être utilisés à cette fin :
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
...
Ces techniques fournissent des moyens efficaces de générer des nombres aléatoires non répétitifs en JavaScript, éliminant ainsi les problèmes liés aux appels récursifs excessifs.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3