这应该能够做的是接受一个由一个字母值填充的二维数组,并返回一个包含所有共享值的数组。这是我目前所拥有的:
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 个公共(public) x,但代码并未在不同情况下反射(reflect)这一点。它还应该能够像这样处理带有其他字母的数组:
var array = [["x","x","z","y","y"],
["x,"x","x","y"],
["x","x","z","y"]];
像这样它应该返回 ["x","x","y"] 因为所有数组共享 2 个公共(public) x 和 1 个公共(public) y
最佳答案
结合使用.every
和.filter
,使用.indexOf
检查一个元素是否存在于数组中。
var array = [
["x", "x", "z", "y", "y"],
["x", "x", "x", "y"],
["x", "x", "z", "y"]
];
var res = array[0].filter(function(x) {
return array.every(function(y) {
if (y.indexOf(x) != -1) {
y[y.indexOf(x)] = Infinity;
return true;
}
return false;
})
})
alert(res)
关于Javascript:跨多个数组查找共享值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34497027/