Trochę zagmatwany tytuł ale nie mam pojęcia jaki inny byłby adekwatny dla tego problemu, jakieś sugestie?
Najpierw opiszę co mi jest potrzebne, chcę co jakiś interwał czasowy odpalać funkcję. W ciągu powiedzmy 8 godzin muszę odpalić tą funkcję 40 razy.
Funkcja musi mi zwrócić tablicę liczb w milisekundach, bo będę używał setTimeout. Oczywiście tablica ma być posortowana. I najważniejsza część tej zagwozdki te liczby nie mogą się powtarzać.
function randomTime(hours, howManyTimes) {
const randomNumber = [];
const milliseconds = 60000 * 60 * hours;
for (let i = 0; i < howManyTimes; i += 1) {
const number = Math.floor(Math.random() * milliseconds);
const genNumber = randomNumber.indexOf(number);
if (genNumber === -1) {
randomNumber.push(number);
}
}
const randomtime = randomNumber.sort((a, b) => a - b);
return randomtime;
};
Krótki opis co tutaj się dzieje.
Do funkcji przekazujemy liczbę która reprezentuje godziny hours, oraz ile liczb ma być zwróconych howManyTimes.
Później deklarujemy nazwę tablicy - randomNumber oraz milliseconds.
Milliseconds jest to 60000 jedna minuta * 60 minut * ilość godzin = 28800000 czyli dokładnie jest 8 godzin w milisekundach.
Później generujemy liczbę w milisekundach, następnie sprawdzamy czy znajduje się ta liczba w tablicy, jeżeli nie to dodajemy tą liczbę do tablicy.
Na końcu tablica jest sortowana.
Pozostało mi wywołać tą funkcję.
const random = randomTime(8,40);
console.log(random);