Shuffle
This commit is contained in:
parent
094f1daef3
commit
ee503b3bce
1 changed files with 15 additions and 0 deletions
15
web/packages/utils/array.ts
Normal file
15
web/packages/utils/array.ts
Normal file
|
@ -0,0 +1,15 @@
|
|||
/**
|
||||
* Shuffle.
|
||||
*
|
||||
* Return a new array containing the shuffled elements of the given array.
|
||||
*
|
||||
* The algorithm used is not the most efficient, but is effectively a one-liner
|
||||
* whilst being reasonably efficient. To each element we assign a random key,
|
||||
* then we sort by this key. Since the key is random, the sorted array will have
|
||||
* the original elements in a random order.
|
||||
*/
|
||||
export const shuffle = <T>(xs: T[]) =>
|
||||
xs
|
||||
.map((x) => [Math.random(), x])
|
||||
.sort()
|
||||
.map(([, x]) => x);
|
Loading…
Add table
Reference in a new issue