我正在尝试实现一个函数,当给定两个表示线的对象时,返回它们是否重叠。
这是它的视觉效果。
示例 1:
checkOverlap({start: 0, end: 10}, {start: 8, end: 15})
从视觉上看,应该是:
0--------10
8-------15
^ overlap
返回 true
。
示例 2:
checkOverlap({start: 12, end: 15}, {start: 0, end: 10})
从视觉上看,应该是:
12-------15
0--------10
no overlap
返回 false
。
这是我的函数,它适用于一些但不是全部:
function checkOverlap(lineA, lineB) {
var result;
for(var a in lineA) {
for(var b in lineB) {
if(a.end > b.start) {
result = true;
} else {
result = true;
}
}
}
return result;
}
最佳答案
Nina Scholz 的回答是行不通的,例如。 a = {开始:1,结束:2},b = {开始:0,结束:10}。
如果行 {start: 0, end: 10} 和 {start: 10, end: 15} 算作重叠:
function checkOverlap(lineA, lineB) {
return lineA.start >= lineB.start && lineA.start <= lineB.end ||
lineA.end >= lineB.start && lineA.end <= lineB.end ||
lineB.start >= lineA.start && lineB.start <= lineA.end ||
lineB.end >= lineA.start && lineB.end <= lineA.end;
}
如果不是:
function checkOverlap(lineA, lineB) {
return lineA.start > lineB.start && lineA.start < lineB.end ||
lineA.end > lineB.start && lineA.end < lineB.end ||
lineB.start > lineA.start && lineB.start < lineA.end ||
lineB.end > lineA.start && lineB.end < lineA.end;
}
关于javascript - 检查范围重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40567740/