Was ist der effizienteste Weg, um zwei eindeutige zufällige Elemente aus einem Array auszuwählen (dh stellen Sie sicher, dass das gleiche Element nicht zweimal ausgewählt wird).
Ich habe bisher:
%Vor%Aber das hängt oft meine Seitenladung.
Jede bessere Lösung?
Extra Frage, wie erweitere ich das auf n
elements
%Vor%_. Beispiel (Liste, [n])
Erzeugt eine Zufallsstichprobe aus der Liste. Übergeben Sie eine Zahl, um n zufällige Elemente aus der Liste zurückzugeben. Andernfalls wird ein einzelnes zufälliges Element zurückgegeben.
Wenn Sie die Quelle betrachten, verwendet sie shuffle wie @ thg435 vorgeschlagen.
Was Rob W dir gesagt hat, ich füge hinzu, dass eine andere Lösung wäre, einen zufälligen Punkt zu finden und für den zweiten Punkt einen zufälligen Offset von dem Punkt zu finden:
%Vor%Wir fügen 1 hinzu, weil das aktuelle Element nicht erneut ausgewählt werden kann, und subtrahiere 1, weil ein Element bereits ausgewählt wurde.
Zum Beispiel ein Array von drei Elementen (0, 1, 2). Wir wählen zufällig das Element 1. Jetzt sind die "guten" Offset-Werte 0 und 1, wobei Offset 0 das Element 2 und Offset 1 das Element 0 ergibt.
Beachten Sie, dass Sie dadurch zwei zufällige Elemente mit verschiedenen INDEX erhalten, nicht mit einem anderen WERT!
Wenn Sie das Array mischen und die Anzahl der Elemente, die Sie zurückgeben möchten, spleißen, Der Rückgabewert enthält so viele Elemente wie möglich. wenn Sie nach mehr Gegenständen als in der Anordnung fragen. Sie können das tatsächliche Array oder eine Kopie mit slice () mischen.
%Vor%Wenn Sie die ausgewählten Elemente aus dem ursprünglichen Array entfernen möchten, damit ein zweiter Aufruf nicht die Elemente enthält, die der erste Aufruf zurückgegeben hat, ein zweites Argument übergeben: getRandom (3, true);
%Vor%Tags und Links javascript jquery