Heim  >  Artikel  >  Web-Frontend  >  So generieren Sie sich nicht wiederholende Zufallszahlen in JavaScript ohne Rekursion

So generieren Sie sich nicht wiederholende Zufallszahlen in JavaScript ohne Rekursion

Barbara Streisand
Barbara StreisandOriginal
2024-10-20 08:03:29307Durchsuche

How to Generate Non-Repeating Random Numbers in JavaScript without Recursion

Generieren sich nicht wiederholender Zufallszahlen in JavaScript

Das Ziel dieser Aufgabe besteht darin, eine Folge von Zufallszahlen innerhalb eines angegebenen Bereichs zu generieren, die sich nicht wiederholen. Ein Ansatz besteht darin, jede generierte Nummer mit einer Liste zuvor erstellter Nummern zu vergleichen. Allerdings kann diese Methode aufgrund übermäßiger Rekursion zu einem „RangeError“ führen.

Eine bessere Lösung besteht darin, im Voraus eine zufällige Permutation der gewünschten Zahlen zu generieren. Dies kann mit verschiedenen Techniken erreicht werden:

Zufällige Permutation

<code class="javascript">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);
}</code>

Dieser Algorithmus erzeugt eine zufällige Reihenfolge der Zahlen in Zahlen. Wenn Sie den Bereich einschränken oder gerade Zahlen angeben möchten, können Sie die Zahlen entsprechend ändern.

Fisher-Yates-Shuffle

<code class="javascript">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]);</code>

Der Fisher-Yates-Shuffle ist eine effizientere Alternative zum Zufall Permutationsmethode, da sie den Einsatz kostspieliger Array-Operationen vermeidet.

Generatoren

<code class="javascript">function* shuffle(array) {

    var i = array.length;

    while (i--) {
        yield array.splice(Math.floor(Math.random() * (i+1)), 1)[0];
    }

}</code>

Generatoren bieten eine noch dynamischere Option. Durch die Verwendung der yield- und next-Methoden können Sie bei Bedarf auf die gemischten Zahlen zugreifen, ohne die gesamte Sequenz vorab generieren zu müssen.

Dieser Ansatz ist besonders nützlich in Fällen, in denen Sie eine große Anzahl von Zufallszahlen benötigen und diese vermeiden möchten Ich halte sie alle gleichzeitig in Erinnerung.

Das obige ist der detaillierte Inhalt vonSo generieren Sie sich nicht wiederholende Zufallszahlen in JavaScript ohne Rekursion. 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