Вот функция ES6 +.Вы берете любой массив и сколько хотите случайных значений, и он будет выплевывать их без дубликатов и предотвратит неправильное использование функции, запретив число, превышающее количество уникальных значений.
random = (arr, n) => {
let l = [...new Set(arr)].length, res = new Set(), r = () => arr[Math.random() * l | 0]
if (n > l) throw new Error("length is greater than n unique values");
while (res.size < n) res.add(r());
return [...res];
}
let arr = ["Hans", "Ole", "Nils", "Olav", "Per", "Knut", "Kari", "Line", "Pia"];
random = (arr, n) => {
let l = [...new Set(arr)].length, res = new Set(), r = () => arr[Math.random() * l | 0]
if (n > l) throw new Error("length is greater than n unique values");
while (res.size < n) res.add(r());
return [...res];
}
console.log(random(arr, 9));
console.log(random(arr, 5));