Issue
In particular, I want to make sure to avoid the mistake made in Microsoft’s Browser Choice shuffle code. That is, I want to make sure that each letter has an equal probability of ending up in each possible position.
e.g. Given “ABCDEFG”, return something like “GEFBDCA”.
Solution
I modified an example from the Fisher-Yates Shuffle entry on Wikipedia to shuffle strings:
String.prototype.shuffle = function () {
var a = this.split(""),
n = a.length;
for(var i = n - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
return a.join("");
}
console.log("the quick brown fox jumps over the lazy dog".shuffle());
//-> "veolrm hth ke opynug tusbxq ocrad ofeizwj"
console.log("the quick brown fox jumps over the lazy dog".shuffle());
//-> "o dt hutpe u iqrxj yaenbwoolhsvmkcger ozf "
More information can be found in Jon Skeet’s answer to Is it correct to use JavaScript Array.sort() method for shuffling?.
Answered By – Andy E
Answer Checked By – Marilyn (BugsFixing Volunteer)