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

标签 javascript arrays compare

这应该能够做的是接受一个由一个字母值填充的二维数组,并返回一个包含所有共享值的数组。这是我目前所拥有的:

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/

相关文章:

javascript - 客户端数据压缩/解压缩?

javascript - 难以将值发送到输入字段(听起来很荒谬)

javascript - reactjs 中字典的正确 PropTypes 是什么

c++ - 如何实现自定义模板排序功能?

string - 在 Bash 中比较两个字符串时出现 "command not found"错误

带 map 的 Javascript 箭头函数

javascript - 表达式周围的方括号是什么意思,例如 `var x = a + [b]` ?

php - 检查数据库中的新条目

php - 如何将产品添加到购物车并附加数量。

python - Python比较列表