【发布时间】:2019-02-01 20:52:31
【问题描述】:
我有两个有间隔的数组:
[
[
[8:00, 11:30], // [begin,end]
[12:00, 16:00], // [begin,end]
[18:00, 21:00] // [begin,end]
],
[
[8:00, 15:30], // [begin,end]
[16:00, 17:45], // [begin,end]
[19:00, 21:30] // [begin,end]
]
]
我需要找到这些时间的共同间隔,所以应该是:
[
[8:00, 11:30],
[12:00, 15:30],
[19:00, 21:00]
]
我将小时更改为分钟,然后将第一个数组的间隔与第二个数组的间隔进行比较,但输出不像上面显示的那样。
有人知道怎么解决吗?
let hours = [[[8:00,11:30],[12:00,16:00],[18:00,21:00]]
[[8:00,15:30],[16:00,17:45],[19:00,21:30]]]
let commonHors=[];
for (let i=0; i<(hours||[]).length; i++){
for(let j=0; j<(hours||[])[i].length; j++){
let fromFirst = moment.duration(hours[0][j][0]).minutes() +
moment.duration(hours[0][j][0]).hours()*60;
let fromSec = moment.duration(hours[1][j][0]).minutes() +
moment.duration(hours[1][j][0]).hours()*60;
let toFirst = moment.duration(hours[0][j][1]).minutes() +
moment.duration(hours[0][j][1]).hours()*60;
let toSec = moment.duration(hours[1][j][1]).minutes() +
moment.duration(hours[0][j][1]).hours()*60;
if(fromFirst >= fromSec && toFirst <= toSec){
commonHors.push(hours[0][j][0],hours[0][j][1]);
}
else if(fromFirst <= fromSec && toFirst <= toSec){
commonHors.push(hours[1][j][0],hours[0][j][1]);
}
else if(fromFirst >= fromSec && toFirst >= toSec){
commonHors.push(hours[0][j][0],hours[1][j][1]);
}
else if(fromFirst <= fromSec && toFirst >= toSec){
commonHors.push(hours[1][j][0],hours[1][j][1]);
}
}
}
【问题讨论】:
-
您必须更清楚地定义“公共间隔”的含义。目前尚不清楚(无论如何对我来说)为什么您显示的预期结果是正确的。你用来推导它们的规则是什么?而且,目前的代码出了什么问题?您是否收到错误或不正确的输出?请说明清楚,这样我们就不必重新开始并重新执行您在卡住之前(希望)已经执行的所有相同调试。
-
根据前两个内部数组
[8:00, 11:30],[12:00, 15:30],您的常见间隔是三个半小时,但最后一个是两个小时间隔[19:00, 21:00]?如果找到等于相同的间隔是目标,那么最后一个时间间隔让我感到困惑,如果这确实是你所说的解决方案。 -
我编辑了一点我的答案。数组中的这些时间是开始时间和结束时间。我需要在第一个数组和第二个数组中找到几个小时同时属于小时的新间隔。这个区间:[19:00, 21:00] 可以,因为 19:00 在 [18:00, 21:00] 之间,但是 21:30 不是,所以 21:00 是最后一小时(21:00 是在 [18:00, 21:00])
标签: javascript arrays reactjs