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:
<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.
<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.
<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!