过滤日期之间的对象键

时间:2018-09-11 10:26:53

标签: javascript momentjs

我正在尝试使用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 :(得分:0)

您的代码很好,除了它不会在任何地方设置过滤事件。您可以修改代码以设置诸如newEvents[key] = events[key]之类的newEvent,也可以像这样使用reduce

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移到了循环之外,但实际上并不是必需的。另外,我还没有更改日期范围逻辑。但是这里不需要momentjs,就像@Abhay在评论中说的那样,您只需使用时间戳即可。