Фильтровать ключи объекта, между датами - PullRequest
0 голосов
/ 11 сентября 2018

Я пытаюсь проверить дату между диапазонами дат, используя Moment

const startDate = new Date(dates[0].year, dates[0].day, dates[0].month),
  endDate = new Date(
    dates[lastItemIndex - 1].year,
    dates[lastItemIndex - 1].day,
    dates[lastItemIndex - 1].month
  );
newEvents = Object.keys(events).filter(key => {
  moment()
    .range(startDate, endDate)
    .contains(moment(key).toDate());
});

Мой events объект:

{
  2018-09-11: {
    dots: Array(4),
    disabled: false,
    selected: true,
    selectedColor: "#00CCCB",
    customStyles: {…}
  }
  2018-09-12: {
    dots: Array(2),
    disabled: false,
    selected: true,
    selectedColor: "#00CCCB",
    customStyles: {…}
  }
  2018-09-13: {
    dots: Array(2),
    disabled: false,
    selected: true,
    selectedColor: "#00CCCB",
    customStyles: {…}
  }
  2018-09-14: {
    dots: Array(1),
    disabled: false,
    selected: true,
    selectedColor: "#00CCCB",
    customStyles: {…}
  }
}

Как мне отфильтроватьключи объекта, использующие диапазон дат?

1 Ответ

0 голосов
/ 11 сентября 2018

Ваш код в порядке, за исключением того, что он нигде не устанавливает отфильтрованные события. Вы можете либо изменить свой код для установки новых событий, например newEvents[key] = events[key], либо использовать уменьшить , как это.

const dateRange = moment().range(startDate, endDate),
newEvents = Object.keys(events).reduce((output, dateString) => {
    dateRange.contains(moment(dateString).toDate()) && (output[dateString] = events[dateString])
    return output
}, {})

Обратите внимание, я переместил dateRange за пределы цикла для эффективности, но на самом деле это не требуется. Кроме того, я не изменил логику диапазона дат . Но моментов здесь не требуется, как сказал @Abhay в комментариях, вы можете просто использовать временные метки.

...