在两个日期对象集合中查找匹配对象

时间:2016-08-30 17:59:49

标签: javascript ecmascript-6

我有两个对象集合。我想知道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...
]

1 个答案:

答案 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

访问每个日期的每个匹配范围