@magary4

Как вычесть массивы в функциональном стиле?

из бд прилетают записи вида
[
{type: "open", from: "2020-08-11 10:00", to: "2020-08-11 17:00"},
{type: "closed", from: "2020-08-11 12:00", to: "2020-08-11 13:00"},
{type: "closed", from: "2020-08-11 15:00", to: "2020-08-11 16:00"}
]


как из этого собрать массив вида ["10:00", "10:30", "11:00", "11:30", "13:00", "13:30", "14:00", "14:30", "16:00", "16:30"]

в фунциональном стиле
  • Вопрос задан
  • 118 просмотров
Решения вопроса 1
@dimoff66
Кратко о себе: Я есть
function getIntervals (arr) {
   const mlsInterval = 30 * 60 * 1000

   const openHours = arr.filter(v => v.type === 'open').flatMap(v => {
      const [d1, d2] = [new Date(v.from).getTime(), new Date(v.to).getTime()]
      const length = Math.floor(( d2 - d1 ) / mlsInterval)
      const hours = Array.from({ length }, (z, ind) => new Date(d1 + ind * mlsInterval))
      return hours
   })

   const closeIntervals = arr.filter(v => v.type === 'closed').map(v => 
     [new Date(v.from).getTime(), new Date(v.to).getTime()]       
   )

   const result = openHours.filter(v =>  
     !closeIntervals.some(([start, stop]) => start <= v && stop > v)
   ).map(v => new Date(v).toString().match(/\d\d:\d\d:\d\d/g)[0])

   return result
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы