Alexandroppolus, Firefox на массивах более полумиллиона элементов выдаёт "Uncaught RangeError: too many function arguments". Но переполнения стека не происходит.
Если полумиллиона мало, то можно искать max через reduce.
smokedevil666, Если это одна дата для каждого сотрудника, то какой смысл выносить её в отдельную таблицу? Но, если хочется, то это можно сделать. Читайте по ссылке, которую я дал об отношении one-to-one.
Wataru, Не факт, что при малом требуемом размере массива-результата, использование кучи или очереди даст выигрыш в скорости. Алгоритмическая сложность - это всё таки не про абсолютную скорость, а про изменение скорости с ростом объёма данных.
Это уже будет не рандом. Для вашей схемы можно установить простейшую закономерность - число, которое не выпало в первых N-1 бросках, обязательно выпадет в следующем броске.
Кроме того, у вас в принципе невозможно выпадение трёх и более одинаковых чисел подряд. А такая комбинация в рандоме возможна с вероятностью 1/Nk.
let random = (Math.random()*9).toFixed();
Не надо так делать. У вас шанс выпадения для 0 и 9 в два раза ниже, чем для остальных чисел.
Правильно: const random = Math.floor(Math.random() * 10);
А во втором вашем варианте проходит 0