Heim > Web-Frontend > js-Tutorial > 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
Freigeben: 2024-10-20 07:59:01
Original
1028 Leute haben es durchsucht

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);
}
Nach dem Login kopieren

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]);
Nach dem Login kopieren

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];
    }

}
Nach dem Login kopieren

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.
Nach dem Login kopieren

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!

Quelle:php
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage