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. 🙂