Skip to content

Instantly share code, notes, and snippets.

@dfkaye
Created June 4, 2019 18:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dfkaye/36a4cd28c91d8ee1febb92c1b2b57e04 to your computer and use it in GitHub Desktop.
Save dfkaye/36a4cd28c91d8ee1febb92c1b2b57e04 to your computer and use it in GitHub Desktop.
fisher-yates shuffle
// 4 June 2019
// fisher-yates shuffle
// array and array-like structures
// modified from very nice implementation at
// https://stackoverflow.com/questions/2450954/how-to-randomize-shuffle-a-javascript-array/2450976#2450976
function shuffle(items) {
var array = Object.keys(items);
var currentIndex = array.length, temporaryValue, randomIndex;
// While there remain elements to shuffle...
while (0 !== currentIndex) {
// Pick a remaining element...
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex -= 1;
// And swap it with the current element.
temporaryValue = array[currentIndex];
array[currentIndex] = array[randomIndex];
array[randomIndex] = temporaryValue;
}
return items[array[Math.floor(Math.random() * currentIndex)]];
}
var tests = [
[1,2,3,4,5,6,7,8],
{ 0: 'name', 1: 'value', 2: 'property', 3: 'attribute', 4: 'firstChild', 5: 'lastChild'}
];
var results = tests.map(function(test) {
return shuffle(test);
});
console.log(JSON.stringify(results, null, 2));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment