Heim  >  Artikel  >  Web-Frontend  >  Wie kann die Generierung von Zufallszahlen in JavaScript für eindeutige und sich nicht wiederholende Ergebnisse verbessert werden?

Wie kann die Generierung von Zufallszahlen in JavaScript für eindeutige und sich nicht wiederholende Ergebnisse verbessert werden?

Barbara Streisand
Barbara StreisandOriginal
2024-10-20 07:59:01938Durchsuche

How to Improve Random Number Generation in JavaScript for Unique and Non-Repeating Results?

Eindeutige Zufallszahlen in JavaScript generieren

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn