Sie haben eine Funktion entwickelt, die Elemente aus einem Array zufällig auswählt und so sicherstellt, dass aktuelle Auswahlen nicht wiederholt werden. Obwohl die aktuelle Lösung effektiv funktioniert, haben Sie Bedenken hinsichtlich ihrer Effizienz und ob sie zu übermäßiger Schleifenbildung führen könnte. Lassen Sie uns einen effizienteren Ansatz erkunden.
1. Überlegungen zur Rekursion
Ja, Ihre Funktion „selectName()“ kann als rekursiv betrachtet werden, da sie sich selbst aufruft, bis sie einen eindeutigen Namen findet. Rekursion kann bei bestimmten Problemen nützlich sein, es ist jedoch wichtig, die Stapelnutzung und die Möglichkeit einer übermäßigen Tiefe im Auge zu behalten.
2. Eine effiziente Lösung
Um Effizienzbedenken auszuräumen, können wir eine andere Strategie verfolgen. Anstatt uns auf Rekursion und Schleifen zu verlassen, bis ein eindeutiger Name gefunden wird, können wir eine Kopie des ursprünglichen Arrays erstellen und zufällig Elemente aus der Kopie auswählen, bis alle Elemente ausgewählt sind. Sobald alle Elemente erschöpft sind, setzen wir die Kopie auf ihren ursprünglichen Zustand zurück.
Hier ist eine JavaScript-Implementierung dieses Ansatzes:
<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; }; } var chooser = randomNoRepeats(['Foo', 'Bar', 'Gah']); console.log(chooser()); // => "Bar" console.log(chooser()); // => "Foo" console.log(chooser()); // => "Gah" console.log(chooser()); // => "Foo" -- only repeats once all items are exhausted.</code>
Dieser Ansatz nutzt die Array-Slice()-Methode von JavaScript, um Erstellen Sie eine flache Kopie des ursprünglichen Arrays. Anschließend wählt es wiederholt zufällige Elemente aus der Kopie aus und entfernt sie aus der Kopie, wodurch effektiv eine zufällige Auswahl ohne Wiederholungen nachgeahmt wird, bis alle Elemente erschöpft sind. Sobald alle Elemente ausgewählt sind, wird die Kopie zurückgesetzt, sodass die zufällige Auswahl erneut beginnen kann.
Das obige ist der detaillierte Inhalt vonWie wählt man Array-Elemente effizient zufällig und ohne Wiederholung aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!