La génération de nombres aléatoires non répétitifs dans JS peut être réalisée en utilisant 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 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 :
<code class="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]);</code>
Alternativement, des générateurs peuvent être utilisés à cette fin :
<code class="js">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 ...</code>
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.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!