10 gru 2019

Tworzymy losową tablicę na podstawie czasu.

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);