2016-08-30 126 views
0

我有兩個對象集合。我想知道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

是的,'filter' +'some'應該做的。嘗試一下! – Bergi

+0

很確定代碼不起作用。它應該是'日期= []'不'日期= {}',對吧? –

+0

當然,對不起。 –

回答

1

您正在使用範圍,因此僅檢查範圍的兩端以確定日期是否在範圍內是不夠的。

既然你已經提到過使用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日期每匹配範圍)

+0

謝謝你,但我已經理解的比較部分(我甚至可以比較'from'部分)。我的問題是如何遍歷集合。 –

+1

我的代碼片段顯示如何迭代和查找所有匹配的範圍。您可以提供自己的比較器來代替''range.contains(dateObj.date)''行(請注意這使用[Arrow functions](https://developer.mozilla.org/en-US/docs/Web/) JavaScript/Reference/Functions/Arrow_functions),但它不是必需的 - 你也可以使用常規的匿名函數)。 – mdziekon

+1

@mdziekon:我猜你應該只是在OP的問題中提出要比較的問題 – Bergi

相關問題