Heim  >  Artikel  >  Web-Frontend  >  Wie kann ich zufällige Array-Elemente ohne Wiederholungen effizient auswählen?

Wie kann ich zufällige Array-Elemente ohne Wiederholungen effizient auswählen?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-31 04:47:30327Durchsuche

How Can I Efficiently Select Random Array Items Without Repeats?

So wählen Sie Array-Elemente effizient und zufällig ohne Wiederholungen aus

Ihr Code erstellt ein Array aktueller Auswahlmöglichkeiten, um Wiederholungen zu verhindern, und ruft eine rekursive Funktion auf mit dem Namen „chooseName()“, wenn ein ausgewähltes Element in den letzten Auswahlmöglichkeiten enthalten ist. Dieser Ansatz gewährleistet Eindeutigkeit, kann jedoch zu einer Endlosschleife führen, wenn die Array-Größe begrenzt ist.

Ist es eine rekursive Funktion?

Ja, ChooseName() ruft sich selbst auf Finden Sie eine einzigartige Auswahl. Durch Rekursion kann die Funktion Array-Elemente durchlaufen, bis sie eines findet, das nicht in den letzten Auswahlmöglichkeiten enthalten ist.

Verbesserung der Effizienz

Um Endlosschleifen zu vermeiden, sollten Sie einen alternativen Ansatz in Betracht ziehen in der Antwort vorgeschlagen:

<code class="javascript">function randomNoRepeats(array) {
  var copy = array.slice(0);
  return function() {
    if (copy.length < 1) { copy = array.slice(0); }
    var index = Math.floor(Math.random() * copy.length);
    var item = copy[index];
    copy.splice(index, 1);
    return item;
  };
}</code>

Diese Funktion generiert eine Kopie des ursprünglichen Arrays und wählt zufällig ein Element daraus aus. Sobald alle Elemente verwendet sind, wird eine neue Kopie des ursprünglichen Arrays erstellt, sodass eine eindeutige Auswahl gewährleistet ist, selbst wenn das Array erschöpft ist.

Das obige ist der detaillierte Inhalt vonWie kann ich zufällige Array-Elemente ohne Wiederholungen effizient auswählen?. 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