在Javascript中实现检查重叠间隔的算法
试图用Javascript实现marcog的答案重叠间隔算法,但我无法让它工作 我想检查JSON数据结构中的值,找出表示行的x1-x2坐标的开始-停止值。我在一个接一个地添加新行,我想知道添加新行时会导致行重叠 我得到的错误是,当明显存在重叠时,它总是不打印重叠 这是我目前掌握的代码:在Javascript中实现检查重叠间隔的算法,javascript,algorithm,Javascript,Algorithm,试图用Javascript实现marcog的答案重叠间隔算法,但我无法让它工作 我想检查JSON数据结构中的值,找出表示行的x1-x2坐标的开始-停止值。我在一个接一个地添加新行,我想知道添加新行时会导致行重叠 我得到的错误是,当明显存在重叠时,它总是不打印重叠 这是我目前掌握的代码: var data = [], json = [ { "start" : 100, "stop" : 800 }, { "start" : 900, "stop" :
var
data = [],
json = [
{
"start" : 100,
"stop" : 800
},
{
"start" : 900,
"stop" : 1200
},
{
"start" : 200,
"stop" : 600
}
],
sortInterval, checkOverlappingInterval;
sortInterval = function (value) {
//Sorts a list with lower numbers first and end point come before
//starting points on ties
value.sort(function (a,b){
var aSplit = a.split("_"),
bSplit = b.split("_");
if (aSplit[0] * 1 > bSplit[0] * 1){
return 1;
}
if (aSplit[0] * 1 < bSplit[0] * 1) {
return -1;
} else {
if (aSplit[1] > bSplit[1]) {
return 1;
} else {
return -1;
}
}
});
};
checkOverlappingInterval = function(value){
//Return true if there are overlapps
var inInterval = false;
value.forEach(function(v) {
if (v.charAt(v.length-1) === "S"){
if(inInterval){
return true;
}
else {
inInterval = true;
}
}
else {
inInterval = false;
}
});
//return true;
return false;
};
json.forEach(function (value) {
//Push the new values to interval array and sort the array
data.push(value.start + "_S");
data.push(value.stop + "_E");
sortInterval(data);
//Check to see if the new line caused an overlapping line
//If it did increase y and clear out data
if (checkOverlappingInterval(data)){
console.log("overlaps");
}
//If it did not print line
else {
console.log("no overlaps");
}
});
我认为这应该是可行的: 1按起始值对json数组进行排序 2我确信开始总是比之前的所有开始都要大,所以我唯一要检查的是,之前的停止是否比我正在检查的当前开始大。我用for来实现这一点,并在不同的时间内保持最大停止。因此,如果当前起始值大于我的最大值,它将重叠
json = [
{
"start" : 100,
"stop" : 800
},
{
"start" : 900,
"stop" : 1200
},
{
"start" : 200,
"stop" : 600
},
{"start":700, "stop":800}
];
function checkOverlaps(arr){
arr=arr.slice(0);
arr.sort(function(a,b){return a.start-b.start});
var max=0;
for(var i=1;i<arr.length;i++){
max=arr[i-1].stop > max ? arr[i-1].stop : max;
if(arr[i].start < max){
console.log(arr[i],"overlaps");
}
}
}
checkOverlaps(json);
两个错误:
您忘记了在奇偶校验时从Compassion函数返回0。看见
您正试图从forEach回调返回true。这将仅从当前回调返回,而不是从checkOverlappingInterval函数返回。请使用/,或一个普通的。
哪种算法?这些答案似乎提出了多个不同的答案,最高的一个来自马可