How to get a number of random elements from an array?
Just two lines :
// Shuffle arrayconst shuffled = array.sort(() => 0.5 - Math.random());// Get sub-array of first n elements after shuffledlet selected = shuffled.slice(0, n);
DEMO:
Try this non-destructive (and fast) function:
function getRandom(arr, n) { var result = new Array(n), len = arr.length, taken = new Array(len); if (n > len) throw new RangeError("getRandom: more elements taken than available"); while (n--) { var x = Math.floor(Math.random() * len); result[n] = arr[x in taken ? taken[x] : x]; taken[x] = --len in taken ? taken[len] : len; } return result;}
There is a one-liner unique solution here
array.sort(() => Math.random() - Math.random()).slice(0, n)