Javascript 如何搜索多个数组并将所有重复项输出到一个数组?

Javascript 如何搜索多个数组并将所有重复项输出到一个数组?,javascript,arrays,Javascript,Arrays,我正在构建一个调度系统,我有几个数组(确切的数目会有所不同),其中包含事件的分钟数。我需要以一个数组结束,该数组只包含至少2个其他数组包含的分钟数 这是我需要的一个例子。给定以下数组: 阵列1: [0] => 500 [1] => 501 [2] => 502 ... [99] => 599 阵列2: [0] => 450 [1] => 451 [2] => 452 ... [99] => 549 阵列3: [0] => 550 [1]

我正在构建一个调度系统,我有几个数组(确切的数目会有所不同),其中包含事件的分钟数。我需要以一个数组结束,该数组只包含至少2个其他数组包含的分钟数

这是我需要的一个例子。给定以下数组:

阵列1:

[0] => 500
[1] => 501
[2] => 502
...
[99] => 599
阵列2:

[0] => 450
[1] => 451
[2] => 452
...
[99] => 549
阵列3:

[0] => 550
[1] => 551
[2] => 552
...
[99] => 649
阵列4:

[0] => 650
[1] => 651
[2] => 652
...
[99] => 749
我想得到

最终阵列:

[0] => 500
[1] => 501
[2] => 502
...
[99] => 599
这是因为阵列1和阵列2从500-549重叠,而阵列3和阵列1从550重叠到599。数组4中的值将被忽略,因为它们在任何其他数组中都找不到


希望这是有意义的,并感谢任何帮助

您可以使用EcmaScript feature Array.indexOf

for(var i = 0; i < 99; i++) {
    if(arr2.indexOf(arr1[i])...// repeat for all tables)
} 
for(变量i=0;i<99;i++){
if(arr2.indexOf(arr1[i])…//对所有表重复)
} 

我使用一个对象来跟踪唯一值,从而制定了解决方案。只有在对象中已经存在值时,才会将其添加到结果数组中

函数createArray(起始值、结束值){
常数
结果=[];
对于(让值=起始值;值{
//当该值已经在散列中时,表示它出现在多个散列中
//源数组的一部分,因此它属于交叉点。仅
//如果该值为false,则应将其添加到结果数组中
//确保该值不会添加到结果数组中
//多次。
if(散列[值]==未定义){
//将该值添加到哈希中。将该值设置为false以指示它没有
//已添加到结果中。
散列[值]=假;
}else if(散列[值]==false){
结果:推(值);
//将该值设置为true,则该值已添加到结果中。
散列[值]=真;
}
});
//返回具有相交值的数组。
返回结果;
}
常数
//根据问题创建数组。
arrayA=createArray(500599),
arrayB=createArray(450549),
arrayC=createArray(550649),
arrayD=createArray(650749),
//创建一个具有重叠的额外数组,以测试是否会显示所有值
//在交叉路口只有一次。
arrayE=createArray(500599),
//创建交叉点。
相交=相交数组([…arrayA,…arrayB,…arrayC,…arrayD,…arrayE,…arrayE]);
//记录结果。
log(`intersection中的项目数:${intersection.length}`);
控制台日志(交叉点)1)创建两个数组,重叠数组和AllArray

2) 使用所有现有阵列填充AllArray

3) 确保AllArray只有唯一的值:

var uniqueAllArrays = Array.from(new Set(allArrays))

3) 将每个数组与您的UniqueAllarray进行比较,对于每个重叠,将该值放在重叠数组上

您可以使用哈希表进行计数,然后仅获取两个或更多计数的键,并对值进行排序(对于新es系统,可能会忽略这些值),然后返回一个包含值的数组

var值=[500450550650],
数组=值.map(函数(a){
返回数组.apply(null,{length:100}).map(函数(1;,i){
返回a+i;
});
}),
hash=Object.create(null),
结果;
arrays.forEach(函数(a){
a、 forEach(函数(b){
散列[b]=(散列[b]| | 0)+1;
});
});
结果=对象
.keys(散列)
.过滤器(功能(k){
返回散列[k]>=2;
})
.地图(编号)
.排序(功能(a、b){
返回a-b;
});
控制台日志(结果)

。作为控制台包装{max height:100%!important;top:0;}
对,您尝试了什么?听起来像是一种特殊情况,您需要至少查看两次最小值。你自己写过什么吗?出于好奇,为什么要过滤散列而不是在散列包含值后立即向数组中添加值?这难道不会额外消除值的循环吗?@Thijs,每次更新哈希时都需要一个检查,这可能比以后更频繁,以过滤密钥。啊,当然!现在我看到了解决方案中的错误。谢谢