Javascript:跨多个数组查找共享值
它应该能够接收一个填充了一个字母值的2D数组,并返回一个包含所有共享值的数组。这就是我到目前为止所做的:Javascript:跨多个数组查找共享值,javascript,arrays,compare,Javascript,Arrays,Compare,它应该能够接收一个填充了一个字母值的2D数组,并返回一个包含所有共享值的数组。这就是我到目前为止所做的: var res = array[0].filter(function(x){ return array.every(function(y){ return y.indexOf(x) >= 0 }) }); return res; 这是在某种形式的工作状态下,但只有在一定的条件下,这使得它非常偶然。 按计划工作: v
var res = array[0].filter(function(x){
return array.every(function(y){
return y.indexOf(x) >= 0
})
});
return res;
这是在某种形式的工作状态下,但只有在一定的条件下,这使得它非常偶然。
按计划工作:
var array = [["x","x"],
["x","x","x"]];
这将返回预期的[“x”,“x”]数组,但在类似情况下:
var array = [["x","x","x"],
["x","x"]];
它返回[“x”、“x”、“x”]
正如您所看到的,这两个数组只共享2个公共x,但代码并没有在不同的情况下反映这一点。它还应该能够处理具有其他字母的数组,如:
var array = [["x","x","z","y","y"],
["x,"x","x","y"],
["x","x","z","y"]];
对于类似的内容,它应该返回[“x”、“x”、“y”],因为所有数组共享2个公共x和1个公共y使用
的组合。每个和过滤器,使用.indexOf
检查数组中是否存在元素
var数组=[
[“x”、“x”、“z”、“y”、“y”],
[“x”、“x”、“x”、“y”],
[“x”、“x”、“z”、“y”]
];
var res=数组[0]。筛选器(函数(x){
返回数组。每个(函数(y){
如果(y.indexOf(x)!=-1){
y[y.indexOf(x)]=无穷大;
返回true;
}
返回false;
})
})
警报(res)
还有另一种方法,使用只能从IE9等获得的数组方法
函数compareValues(){
var arrs=[].slice.call(参数).sort(函数a,b){
返回a.length>b.length;//始终迭代最短数组
});
返回arrs.shift().filter(函数(x,i){//filter第一个数组
返回arrs.every(函数(arr){//如果所有其他数组
返回arr[i]==x;//在同一索引中具有相同的值
})
});
}
var结果=比较值([“x”、“x”、“x”、“y”],
[“x”、“x”、“z”、“y”],
[“x”、“x”、“z”、“y”、“y”];
警报(结果)代码>这是一份关于无损搜索的建议书
var数组=[
[“x”、“x”、“z”、“y”、“y”],
[“x”、“x”、“x”、“y”],
[“x”、“x”、“z”、“y”]
],
结果=数组.reduce(函数(r,a){
var last={};
返回r.过滤器(功能(b){
var p=a.indexOf(b,最后[b]| | 0);
如果(~p){
最后[b]=p+1;
返回true;
}
});
});
document.write(“”+JSON.stringify(结果,0,4)+“”)
所以你想要一个函数,你可以将任意数量的数组传递给它,然后返回公共值,而不管索引是什么?在第三个数组中没有y
。是的,我没有明确说明如何设置示例,但是是的