我有两个对象集合。我想知道dates
中哪些日期对象与ranges
中的起始日期匹配。
只有重要的日期部分,而不是小时/分钟。
我使用Moment.js来比较天moment(obj.date).isSame(otherObj.date, 'day')
。
我应该使用链式过滤器来查找匹配的对象吗?或者循环中的某种循环?我很抱歉,如果这是一个初学者的问题,但我有点迷失在这里。
dates = [
{date: Mon Aug 29 2016 00:00:00 GMT+0200 (CEST)},
{date: Tue Aug 30 2016 00:00:00 GMT+0200 (CEST)},
{date: Wed Aug 31 2016 00:00:00 GMT+0200 (CEST)}
etc...
]
ranges = [
{from: Tue Aug 30 2016 07:30:00 GMT+0200, to: Tue Aug 30 2016 08:30:00 GMT+0200},
{from: Tue Aug 30 2016 09:30:00 GMT+0200, to: Tue Aug 30 2016 10:30:00 GMT+0200},
{from: Wed Aug 31 2016 04:00:00 GMT+0200, to: Wed Aug 31 2016 05:00:00 GMT+0200}
etc...
]
答案 0 :(得分:1)
您正在使用范围,因此仅检查范围的两端以确定日期是否在范围内是不够的。
由于您已经提到使用Moment,因此您可以查看名为moment-range的插件。这样,您只需使用ranges
构建范围数组,然后使用dates
提供的.contains()
方法匹配moment-range
的每个日期:
ranges = ranges.map((range) => moment.range(range.from, range.to));
dates.forEach((dateObj) => {
dateObj.matchingRanges = ranges.filter((range) =>
range.contains(dateObj.date)
)
});
(使用此代码,您可以使用dates[index].matchingRanges
)