Мне нужна помощь, чтобы уменьшить метод с помощью итерации - PullRequest
0 голосов
/ 07 апреля 2020

Предложение относится к профессионалу и специальности. Предложение имеет дату начала и окончания. Идея состоит в том, чтобы получить все даты путем добавления интервала до достижения конечной даты.

Я пытался получить такой результат:

[
  {
    professional: 5e5e6232b06022066ced2cdd,
    specialty: 5e5d69df3c7c3642b1704505,
    offer: 5e5d69df3c7c3642b1704505,
    date: '6/31/2020',
    hours: ['11:30', '11:50']
  },
  {
    professional: 5e5e6232b06022066ced2cdd,
    specialty: 5e5d69df3c7c3642b1704505,
    offer: 5e5d69df3c7c3642b1704505,
    date: '7/31/2020',
    hours: ['11: 30', '11: 50']
    ]
  },
  {
    professional: 5e5e6232b06022066ced2cdd,
    specialty: 5e5d69df3c7c3642b1704505,
    offer: 5e5d69df3c7c3642b1704505,
    date: '8/31/2020',
    hours: ['11: 30', '11: 50']
    ]
  },
]

Предложения, сохраненные в базе данных выглядит как ниже.

Пока у меня есть это, но даты повторяются, я хочу сгруппировать по датам, т.е. 3/6/2020 с большим количеством часов.

const fetchedOffers = [{
    _id: 'dsd87878',
    professional: 'd2ycdd',
    specialty: '704505',
    name: 'Nueva',
    begin: new Date('2020-03-31T21:36:04.169Z'),
    end: new Date('2020-04-08T21:36:04.169Z'),
    interval: 1200000,
    createdAt: '2020-03-24T23:39:00.808Z',
    updatedAt: '2020-03-24T23:39:00.808Z',
  },
  {
    _id: 'ddd67878',
    professional: '25c0a8',
    specialty: '704505',
    name: 'Nueva',
    begin: new Date('2020-06-30T21:36:04.169Z'),
    end: new Date('2020-07-08T21:36:04.169Z'),
    interval: 1200000,
    createdAt: '2020-03-24T23:39:00.808Z',
    updatedAt: '2020-03-24T23:39:00.808Z',
  }
];

const hours = fetchedOffers.reduce((prev, acc) => {
  let currentDate = acc.begin.getTime()
  const endDate = acc.end.getTime()

  while (currentDate < endDate) {
    const d = new Date(currentDate)
    if (d.getHours() > 7 && d.getHours() < 20 && d.getDay() < 6 && d.getDay() > 0) {
      prev.push({
        date: new Date(d).toLocaleString('es-CL')
      })
    }
    currentDate = currentDate + acc.interval
  }
  return prev
}, [])
  console.log(hours)

Может кто-нибудь мне помочь?

...