我想知道如何比较两个或更多 - 可能是无限的 - 数组的常见值,并有效地将这些值推入一个新的数组.下面我有一个函数可以接受无限的参数,但我不确定这是否是一个好的开始.PHP似乎有一个方法可以做我想要的array_intersect.javascript提供类似的东西吗?
注意:我已经找到了如何使用两个左右的数组来完成此示例的示例,但我还没有找到如何将此类方法应用于未指定数量的数组的示例.因此,我不认为这是一个重复的问题.
为了进一步澄清,阵列可能充满了任何东西.字母,数字,符号,单词,你的名字,它可能在那里.
var sampleOne = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
var sampleTwo = [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18];
function FindDirectRelation() {
for(var i = 0; i < arguments.length; ++i) {
console.log(arguments[i]);
};
};
var directRelation = FindDirectRelation(sampleOne, sampleTwo);
我仍然是编码新手,所以请确保以一种简单易懂的方式解释所有内容.
使用与2个数组一起使用的现有相交,我们可以使用内置reduce()
方法将一个公共子集链接在一个需要交叉的数组数组上:
function intersect(a, b) { var aa = {}; a.forEach(function(v) { aa[v]=1; }); return b.filter(function(v) { return v in aa; }); } var r1=[1,2,3], r2=[1,3,4,5], r3=[5,1,3]; alert([r1, r2, r3].reduce(intersect)) // shows: 1,3
如果你将"intersect"定义为只是在多个数组中(不是每个数组),那么它就更复杂了......