Javascript for loop检查间隔重叠
问题描述:
我有以下javascript函数(感谢Nina Scholz)。Javascript for loop检查间隔重叠
function overlapping(a, b) {
function getMinutes(s) {
var p = s.split(':').map(Number);
return p[0] * 60 + p[1];
}
return getMinutes(a.end) > getMinutes(b.start) && getMinutes(b.end) > getMinutes(a.start);
}
我现在的问题是,我有例如4intervals:
var myArray = [{ start: '01:00', end: '04:00' }
{ start: '05:00', end: '08:00' }
{ start: '07:00', end: '11:00' }
{ start: '09:30', end: '18:00' }]
现在我会检查是否有任何区间重叠另一个。
var overlap = false;
for(var n = 0; n < myArray.length; n++) {
for(var i = 0; i < n; i++) {
var result = overlapping(myArray[n], myArray[i]);
if(result == true) {
overlap = result;
break;
}
}
}
我现在的问题是如果这是正确的,或者如果有更好的方法来做到这一点?
答
建议巫婆检查阵列的所有元素与其他元素。如果发现重叠,则迭代停止并返回true
。否则false
。
function overlapping(a, b) {
function getMinutes(s) {
var p = s.split(':').map(Number);
return p[0] * 60 + p[1];
}
return getMinutes(a.end) > getMinutes(b.start) && getMinutes(b.end) > getMinutes(a.start);
}
function isOverlapping(array) {
var i, j;
for (i = 0; i < array.length - 1; i++) {
for (j = i + 1; j < array.length; j++) {
document.write('test ' + i + ' vs ' + j + '<br>');
if (overlapping(array[i], array[j])) {
return true;
}
}
}
return false;
}
var myArray = [{ start: '01:00', end: '04:00' }, { start: '05:00', end: '08:00' }, { start: '07:00', end: '11:00' }, { start: '09:30', end: '18:00' }];
document.write(isOverlapping(myArray));
如果您已经测试过的代码,你应该知道,如果它的正确。 –
如果有间隔[1-4] [2-5] [6-7] [6-8] - 你想要返回什么?真的,小时,间隔? –
对于初学者来说,'result'变量是多余的。你可以把结果直接放在'overlap'中,然后检查'if(overlap){break}'。 –