Hallo Gunnar,
Was deine richtige Lösung betrifft:
var sortedArray = ["A", "B", "C", "D"];
var shuffledArray = new Array();
for (var i = sortedArray.length; i > 1;)
{
var r = Math.floor(Math.random() * i); // Zufallszahl aus Bereich 0 ≤ r < i
// Bereich nimmt mit jedem Schleifendurchlauf um 1 ab
shuffledArray[--i] = sortedArray[r]; // vermindere Schleifenindex
// kopiere zufällig ausgewähltes Element ans Ende des Zielarrays
sortedArray.splice(r, 1); // lösche eben kopiertes Element aus Ursprungsarray
// damit ist vermindertes i gleich aktueller sortedArray.length
}
shuffledArray[0] = sortedArray[0];
Die hatte ich erst gar nicht gesehen. Man kann dabei sogar noch eine Zeile sparen:
~~~javascript
var sortedArray = ["A", "B", "C", "D"];
var shuffledArray = new Array();
for (var i = sortedArray.length; i > 1;)
{
var r = Math.floor(Math.random() * i); // Zufallszahl aus Bereich 0 ≤ r < i
// Bereich nimmt mit jedem Schleifendurchlauf um 1 ab
shuffledArray[--i] = sortedArray.splice(r, 1); // vermindere Schleifenindex
// verschiebe zufällig ausgewähltes Element ans Ende des Zielarrays
// damit ist vermindertes i gleich aktueller sortedArray.length
}
shuffledArray[0] = sortedArray[0];
Gruß, Don P