Сначала подумал что можно рандомизированный массив засунуть в set...
Надо наоборот - сначала set, потом массив:
function randomArr(length, min, max) {
const values = new Set;
while (values.size < length) {
values.add((Math.random() * (max - min + 1) | 0) + min);
}
return [...values];
}
const arr = randomArr(40, 1, 100);
Но вообще, есть и другие методы.
Например, можно создать массив со всеми возможными значениями, и выдёргивать из него элементы случайным образом, сколько надо:
function randomArr(length, min, max) {
const arr = Array.from({ length: max - min + 1 }, (n, i) => i + min);
return Array.from({ length }, () => arr.splice(Math.random() * arr.length | 0, 1)[0]);
}
Или, создать массив со всеми возможными значениями, перемешать его, взять из начала сколько надо элементов:
function randomArr(length, min, max) {
const arr = Array.from({ length: max - min + 1 }, (n, i) => i + min);
for (let i = arr.length; --i > 0;) {
const j = Math.random() * (i + 1) | 0;
[ arr[j], arr[i] ] = [ arr[i], arr[j] ];
}
return arr.slice(0, length);
}