Das Generieren sich nicht wiederholender Zufallszahlen in JS kann mithilfe verschiedener Techniken erreicht werden. Ursprünglich bestand der Ansatz darin, zu überprüfen, ob eine neu generierte Zahl bereits erstellt wurde, indem man sie einem Array hinzufügt und mit ihr vergleicht. Dies kann jedoch aufgrund übermäßiger rekursiver Aufrufe zu einem Fehler „Maximale Call-Stack-Größe überschritten“ führen.
Eine effiziente Lösung besteht darin, einmal eine zufällige Liste von Zahlen zu generieren und diese nacheinander abzuarbeiten. Dieser Ansatz macht rekursive Aufrufe überflüssig und garantiert keine Wiederholungen.
Hier ist ein Beispiel mit einem 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]);
Alternativ können für diesen Zweck auch Generatoren verwendet werden:
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
...
Diese Techniken bieten effiziente Möglichkeiten, sich nicht wiederholende Zufallszahlen in JavaScript zu generieren und so Probleme im Zusammenhang mit übermäßigen rekursiven Aufrufen zu beseitigen.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3