Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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_Compare - Fatal编程技术网

Javascript:跨多个数组查找共享值

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

它应该能够接收一个填充了一个字母值的2D数组,并返回一个包含所有共享值的数组。这就是我到目前为止所做的:

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
。是的,我没有明确说明如何设置示例,但是是的