2016-04-26 68 views
0

我有以下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; 
     } 
    } 
} 

我现在的问题是如果这是正确的,或者如果有更好的方法来做到这一点?

+1

如果您已经测试过的代码,你应该知道,如果它的正确。 –

+0

如果有间隔[1-4] [2-5] [6-7] [6-8] - 你想要返回什么?真的,小时,间隔? –

+0

对于初学者来说,'result'变量是多余的。你可以把结果直接放在'overlap'中,然后检查'if(overlap){break}'。 –

回答

0

建议巫婆检查阵列的所有元素与其他元素。如果发现重叠,则迭代停止并返回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));