Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.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数组中执行集合计算_Javascript_Arrays_Union_Intersection_Set Theory - Fatal编程技术网

在javascript数组中执行集合计算

在javascript数组中执行集合计算,javascript,arrays,union,intersection,set-theory,Javascript,Arrays,Union,Intersection,Set Theory,我有两个数组,比如: A = [1,2,3,4,5] and B = [1,2,3,6,7] 我想执行以下“集合计算”: C = (A ∩ B) D = A - (A ∩ B) E = B - (A ∩ B) 基本上: C = [1,2,3] D = [4,5] E = [6,7] 是否有一种聪明的方法来做到这一点,或者我必须用循环和ifs交叉检查每个数组成员?我不能使用外部库(如math.js或w/e) 提前感谢。至少可以为您隐藏循环: A=[1,2,3,4,5]; B=[1,2,3,

我有两个数组,比如:

A = [1,2,3,4,5] and B = [1,2,3,6,7]
我想执行以下“集合计算”:

C = (A ∩ B)
D = A - (A ∩ B)
E = B - (A ∩ B)
基本上:

C = [1,2,3]
D = [4,5]
E = [6,7]
是否有一种聪明的方法来做到这一点,或者我必须用循环和ifs交叉检查每个数组成员?我不能使用外部库(如math.js或w/e)

提前感谢。

至少可以为您隐藏循环:

A=[1,2,3,4,5];
B=[1,2,3,6,7];
C=交叉口(A,B);
D=阵列伊迪夫(A,C);
E=arrayDiff(B,C);
log(JSON.stringify(C));
log(JSON.stringify(D));
log(JSON.stringify(E));
功能交叉点(a、b){
返回a.filter(
功能(el){
返回b.indexOf(el)>=0;
}
);
}
函数arrayDiff(a,b){
返回a.filter(
功能(el){
返回b.indexOf(el)<0;
}
);

}
从ES6开始,Javascript有一个简单的方法,它提供了完成上述操作的简洁方法

var交叉点=功能(setA、setB){
返回新的集合([x代表集合的(x)如果集合有(x)));
}
var差=功能(setA、setB){
返回新集合([x表示集合的(x)如果(!setB.has(x))]);
}
A=新集合([1,2,3,4,5]);
B=新集合([1,2,3,6,7]);
//A∩ B=([1,2,3])
交叉口(A、B);
//A\B=([4,5])
差异(A,B);
//B\A=([6,7])

差异(B,A)由于您无法使用外部库,因此似乎您将不得不依赖大量原始资源来进行循环或编写自己的小型库。无论哪种方式,都将使用for循环。希望这不是家庭作业。不,这不是家庭作业,它与工作相关,我不想只为3行代码就在SVN项目中添加整个外部库。我可以想办法得到我想要的结果我只是想在这里问一个更优雅的解决方案。此外,我以前没有必要将集合论用于数组,所以我认为在这里学习一些东西以供以后使用是个好主意。在这种情况下,我很感激被证明是错误的。