例如,我有一个包含两个对象的数组(类似于myObject 1和myObject 2)。现在,当我添加第三个对象时,我将检查时间范围是否重叠。实际上,我不知道如何才能以高性能的方式做到这一点。
变量myObjectArray = [];
var myObject1 = {};
myObject1.startTime = '08:00';
myObject1.endTime = '12:30';
...
var myObject2 = {};
myObject2.startTime = '11:20';
myObject2.endTime = '18:30';
...
myObjectArray.push(myObject1);
myObjectArray.push(myObject2);
7条答案
按热度按时间lstz6jyr1#
假设我们有一些区间
如果我们想添加新的间隔到这个列表中,我们应该检查新的间隔是否不与其中的一些重叠。
您可以循环遍历间隔并检查新间隔是否与其他间隔重叠。注意,在比较间隔时,如果您确定它与您可以将时间转换为数字的日期相同,则不需要Date对象:
间隔不重叠有两种情况:
1.在(a〈c && a〈d)&&(b〈c && b〈d)之前:
1.在(a〉c && a〉d)&&(B〉c & b〉d)之后:
因为总是
c < d
,所以可以说不重叠间隔的条件是(a < c && b < c) || (a > d && b > d)
,并且因为总是a < b
,所以可以说这个条件等价于:这个条件的否定应该给予我们一个重叠区间的条件。基于De Morgan's laws,它是:
请注意,在这两种情况下,间隔不能“接触”对方,这意味着5:00-8:00和8:00-9:00将重叠。如果您想允许它的条件应该是:
至少有5种重叠间期的情况需要考虑:
x一个一个七个一个x一个一个八个一个x一个一个九个一个x一个一个十个一个x一个一个
包含额外的添加和排序间隔函数的完整代码如下所示:
fxnxkyjh2#
你可以试试这样的方法:
yftpprvb3#
将moment-js与moment-range一起使用(引用中断)
测试示例:
更多示例请访问https://github.com/rotaready/moment-range#overlaps
注意,要使上面的代码工作,您可能首先要执行以下操作:
HTML代码
JavaScript代码
非常简洁的解决方案,
momentjs
附带了大量的日期和时间实用程序。uemypmqf4#
使用JavaScript Date()对象存储时间,然后比较它们。如果object1的结束时间大于object2的开始时间,则它们重叠。您可以使用〉操作符比较它们。
给出的演示here
Usage of Date object
yqkkidmi5#
这有个办法可能管用。
https://momentjs.com/
4ioopgfo6#
您可以通过尝试将时间范围合并到现有时间范围来检查是否存在重叠,如果合并后时间范围的总数减少,则存在重叠。
我发现以下文章可能有助于处理合并范围
ukqbszuj7#
要确定时间范围是否与其他时间范围重叠,可以同时使用
moment.js
和moment-range
库。首先安装
moment-js
和moment-range
假定您有一个包含示例对象的INTERVALS数组:您可以使用以下函数:
}
接下来,你可以对overlappingInterval做你需要做的事情:)fidoe.确定它是否存在或者以任何其他方式使用它。祝你好运!