Какие есть способы создания массива:
- Создавать случайные числа, пока не наберётся сколько надо.
- Создать массив, состоящий из всех чисел интервала, выдернуть из него сколько надо случайных.
- Создать массив, состоящий из всех чисел интервала, перемешать его, взять кусок нужного размера.
Что делать при попытке создать массив с длиной больше указанного интервала:
- Кидать ошибку.
- Создавать массив с длиной меньше указанной.
Вот как-то так:
function createRandomArr(size, min, max) {
if (size > (max -= ~-min)) {
throw 'невозможно создать массив указанного размера';
}
const values = new Set;
for (; values.size < size; values.add(min + Math.random() * max | 0)) ;
return [...values];
}
или
function createRandomArr(size, min, max) {
const len = max - min + 1;
const arr = [...Array(len).keys()];
return Array.from(
{ length: Math.min(size, len) },
() => min + arr.splice(Math.random() * arr.length | 0, 1)[0]
);
}
или
function createRandomArr(size, min, max) {
const arr = Array.from(
{ length: max - min + 1 },
(_, i) => i + min
);
for (let i = arr.length; --i > 0;) {
const j = Math.floor(Math.random() * (i + 1));
[ arr[j], arr[i] ] = [ arr[i], arr[j] ];
}
return arr.slice(-size);
}