In JavaScript stellt das Generieren sich nicht wiederholender Zufallszahlen eine Herausforderung dar, wie der Fehlerbericht in Chrome zeigt. Die in der Frage vorgestellte Funktion erfordert Verbesserungen, um eindeutige Zahlen sicherzustellen.
Alternativer Ansatz 1: Zufällige Permutation
Um ein wiederholtes Aufrufen der Zufallszahlenfunktion zu vermeiden, ist es ratsam, sie zu generieren zunächst eine zufällige Permutation von Zahlen. Das folgende Code-Snippet erreicht dies für Zahlen zwischen 1 und 10:
var nums = [1,2,3,4,5,6,7,8,9,10], ranNums = [], i = nums.length, j = 0; while (i--) { j = Math.floor(Math.random() * (i+1)); ranNums.push(nums[j]); nums.splice(j,1); }
Dieser Ansatz eliminiert das Risiko einer längeren Verarbeitungszeit, um nicht verwendete Zahlen zu finden.
Alternativer Ansatz 2: Fisher –Yates Shuffle
Eine effizientere Methode, bekannt als Fisher-Yates Shuffle, kann angewendet werden:
function shuffle(array) { var i = array.length, j = 0, temp; while (i--) { j = Math.floor(Math.random() * (i+1)); // swap randomly chosen element with current element 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]);
Alternativer Ansatz 3: Generatoren
Eine weitere Option ist die Verwendung von Generatoren:
function* shuffle(array) { var i = array.length; while (i--) { yield array.splice(Math.floor(Math.random() * (i+1)), 1)[0]; } }
Zu verwenden:
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 ranNums.next().value; // etc.
Die Wahl des Ansatzes hängt von den spezifischen Anforderungen und Einschränkungen der Anwendung ab.
Das obige ist der detaillierte Inhalt vonWie kann die Generierung von Zufallszahlen in JavaScript für eindeutige und sich nicht wiederholende Ergebnisse verbessert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!