2016-04-26 71 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));