查找两个日期对象集合中的匹配对象
我有两个对象集合。我想知道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...
]
您正在使用范围,因此仅检查范围的两端以确定日期是否在范围内是不够的。
既然你已经提到过使用Moment,你可以看看一个名为moment-range的插件。有了这个,你会使用ranges
简单地构建范围数组,然后符合使用由moment-range
提供.contains()
方法从dates
每日期:
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
日期每匹配范围)
谢谢你,但我已经理解的比较部分(我甚至可以比较'from'部分)。我的问题是如何遍历集合。 –
我的代码片段显示如何迭代和查找所有匹配的范围。您可以提供自己的比较器来代替''range.contains(dateObj.date)''行(请注意这使用[Arrow functions](https://developer.mozilla.org/en-US/docs/Web/) JavaScript/Reference/Functions/Arrow_functions),但它不是必需的 - 你也可以使用常规的匿名函数)。 – mdziekon
@mdziekon:我猜你应该只是在OP的问题中提出要比较的问题 – Bergi
是的,'filter' +'some'应该做的。尝试一下! – Bergi
很确定代码不起作用。它应该是'日期= []'不'日期= {}',对吧? –
当然,对不起。 –