If you need to shuffle the elements of an array, you can use this simple function:
function shuffle(array) {
const copy = [...array]
return copy.sort(() => Math.random() - 0.5)
}
The algorithm
- Creates a copy of the parameter to not modify the original array
- Uses the function
Array.prototype.sort
of the copy to randomly sort the array with a callback that always returnsMath.random() - 0.5
(The random factor).
Example
const example = [1, 2, 3]
const shuffled = shuffle(example)
/*
shuffled is one of these:
- [1, 2, 3]
- [1, 3, 2]
- [2, 1, 3]
- [2, 3, 1]
- [3, 1, 2]
- [3, 2, 1]
*/
Top comments (3)
WARNING why you shouldn't use this method in cryptographic functions: javascript.info/task/shuffle
It also breaks down when there are key collisions.
Sorting by non-unique keys is not shuffling.
Fisher-Yeats is trivial to implement and theoretically correct -- use that instead.
Thanks for contribute. 🙂