Created
June 4, 2019 18:07
-
-
Save dfkaye/36a4cd28c91d8ee1febb92c1b2b57e04 to your computer and use it in GitHub Desktop.
fisher-yates shuffle
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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