我正在尝试使用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: {…}
}
}
如何使用日期范围过滤对象键?
答案 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在评论中说的那样,您只需使用时间戳即可。