Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 计算if';n';或更多间隔相交&;各交叉口的总数_Javascript_Arrays_Algorithm_Math_Intervals - Fatal编程技术网

Javascript 计算if';n';或更多间隔相交&;各交叉口的总数

Javascript 计算if';n';或更多间隔相交&;各交叉口的总数,javascript,arrays,algorithm,math,intervals,Javascript,Arrays,Algorithm,Math,Intervals,我需要帮助开发一个奇怪的算法。我有一个包含人员的JavaScript对象,每个人的开始和结束时间间隔(毫秒)都有一个数组: var person = [ (1533242595, 1533242999), (1533242595, 1533242999), (1533242595, 1533242999) ] 我需要确定是否有任何间隔相交/重叠,但对于n个或更多的交点(例如,确定4+间隔是否重叠),并计算n个或更多相交间隔的总和 一个带有n参数和person对象的函数将

我需要帮助开发一个奇怪的算法。我有一个包含人员的JavaScript对象,每个人的开始和结束时间间隔(毫秒)都有一个数组:

var person = [
    (1533242595, 1533242999),
    (1533242595, 1533242999),
    (1533242595, 1533242999)
]
我需要确定是否有任何间隔相交/重叠,但对于n个或更多的交点(例如,确定4+间隔是否重叠),并计算n个或更多相交间隔的总和


一个带有
n
参数和
person
对象的函数将是完美的。

您确定数据就是这样构造的吗?因为这在我看来不像是一个错误,如果我错了,请纠正我

破译代码以解决小问题。什么是重叠?我们如何检查两个间隔是否相互重叠?当你做这个函数时,用它来循环你的人间隔。创建一个包含匹配项和的变量,并返回该值

function overlaps(startX, endX, startY, endY) {
    if(endX < startY || endY < startX) return false;
  return true;
}

console.log(overlaps(1,2,1,4)) // true
console.log(overlaps(10,20,1,11)) // true

console.log(overlaps(1,2,3,4)) // false
console.log(overlaps(4,3,2,1)) // false
功能重叠(开始、结束、开始、结束){
如果(endX
现在找到一种方法来循环检查您的人员是否与这个小功能重叠

编辑后的,下面是一个答案示例,该答案具有一点大小的可读函数,而不是所选答案中的spagetti代码:

//检查两个间隔是否重叠
函数重叠(开始、结束、开始、结束){
如果(endX=n)totalMatches+=1;
});
返回所有匹配项;
}
//创建要测试的人员
变量person1=[
[10,20],
[100,200]
]
变量person2=[
[1,2000],
[50,1000]
]
变量person3=[
[10,200],
[0,1],
[1000,2000],
[100,2000]
]
//创建一个包含所有人员的数组
var allPersons=[
人1,人2,人3
]
//通过控制台日志进行测试

控制台日志(比较所有人,5)首先必须将此人定义为列表列表:

var person = [
    [1533242595, 1533242999],
    [1533242595, 1533242999],
    [1533242595, 1533242999]
];
在这里您可以找到函数示例:

function limit_intersection(limit, person) {
  var arrayLength = person.length;
  var intersections = 0;
  var intersectionsum = 0;
  var min, max = 0;
  var tmp;
  var intervals = [];
  for (var i = 0; i < arrayLength-1; i++) {
    if(person[i][0] > person[i][1]) {
        tmp = person[i][1];
      person[i][1] = person[i][0];
      person[i][0] = tmp;
    }
    for (var j = i+1; j < arrayLength; j++) {
        if(person[j][0] > person[j][1]) {
        tmp = person[j][1];
        person[j][1] = person[j][0];
        person[j][0] = tmp;
      }

        min = 0;
      max = 0;
        if(person[i][1] <=  person[j][0] || person[i][0] >= person[j][1]){
        // no intersection
        continue;
      }
        intersections +=1;
        if(person[i][0] >= person[j][0]) {
            min = person[i][0]; 
        } else {
            min = person[j][0];
        }

        if(person[i][1] >= person[j][1]) {
            max = person[j][1]; 
        } else {
            max = person[i][1];
        }
        intervals.push([min,max]);
        intersectionsum += max-min;

    }
    }
  return {'n' : intersections, 'sum' : intersectionsum, 'intervals' : intervals};
}
功能限制\u交叉口(限制,人){
var arrayLength=人长;
var交点=0;
var intersectionsum=0;
var最小值,最大值=0;
var-tmp;
var区间=[];
对于(变量i=0;iperson[i][1]){
tmp=人[i][1];
person[i][1]=person[i][0];
个人[i][0]=tmp;
}
对于(var j=i+1;jperson[j][1]){
tmp=人[j][1];
人[j][1]=人[j][0];
人[j][0]=tmp;
}
最小值=0;
max=0;
if(person[i][1]=person[j][1]){
//无交叉路口
持续
}
交点+=1;
if(person[i][0]>=person[j][0]){
最小值=人[i][0];
}否则{
min=人[j][0];
}
if(person[i][1]>=person[j][1]){
max=人[j][1];
}否则{
max=人[i][1];
}
间隔。推送([最小值,最大值]);
相交数+=最大最小值;
}
}
返回{'n':交叉点,'sum':交叉点,间隔:间隔};
}

这里有一个关于

到目前为止你尝试了什么的工作演示?@chevybow老实说,我不知道从哪里开始。我已经盯着这个看了一段时间了,但还是弄不明白。首先,确定相交/重叠的条件。然后循环列表并将第一个间隔与所有间隔进行比较,然后查看请求的结果:
我需要确定是否有任何间隔相交/重叠,但对于n个或多个相交点(例如,确定4个以上的间隔是否重叠)并计算n个或多个相交间隔的总和。
@vasilenicusor感谢您的注释,经过编辑以匹配req结果