【问题标题】:Javascript: How to search multiple arrays for the same valuesJavascript:如何在多个数组中搜索相同的值
【发布时间】:2015-12-27 23:22:47
【问题描述】:

这样做的想法是,它查看未指定数量的数组(本身保存在一个数组中),并在每个数组中搜索相似的值。我已经尝试过了,但我想不出任何数量的 for 循环或临时数组来保存值来解决我的问题。

例子:

[[2,3,5]
 [2,3,5]
 [2,3,7]]

这个 2D 数组是一个示例,说明了它的用途,代码应该给出的返回值是:

2,3

因为这些数字出现在所有 3 种情况下,这将再次用于未指定数量的数组,但由于我还没有真正对未指定数量的事情做过任何事情,我不知道从哪里开始。

很抱歉,我无法提供任何尝试过的代码,但我必须构建一些嵌套的 for 循环,然后坐下来看着它想知道要写什么......

【问题讨论】:

  • 是的,该解决方案使用两个 for 循环(一个嵌套在另一个内部)。不难,努力去做吧,我相信你:)
  • 提示:第一个循环(i)迭代数组位置,第二个循环(j)检查每个数组是否具有相同的第 i 个位置的数字。

标签: javascript arrays compare


【解决方案1】:

使用indexOf可以检查某个值是否存在于数组中,

因此您可以过滤第一个数组的每个值,检查它是否存在于所有其他数组中:

var array=[
 [2,3,5],
 [2,3,5],
 [2,3,7]
];

var res = array[0].filter(function(x){
 return array.every(function(y){
   return y.indexOf(x) >= 0
 })
})

console.log(res)

【讨论】:

    【解决方案2】:

    您可以使用 Array.prototype.reduce() 来实现这一点,例如:

    var arrays = [[2,3,5],
                  [2,3,5],
                  [2,3,7]];
    
    var result = arrays.reduce(function(r, nested, idx, arr) {
        nested.forEach(function(item) {
            r.counts[item] = r.counts[item] ? ++r.counts[item] : 1;
            if (r.counts[item] === arr.length) {
                r.res.push(item);
            }
        });
        return r;
    }, {counts:{}, res:[]}).res;
    
    console.log(result);
    

    【讨论】:

      【解决方案3】:

      var mdArr = [
        [2, 3, 5],
        [2, 3, 5],
        [2, 3, 7]
      ];
      
      
      function checkDups(mdArr) {
        var arr = [];
      
        mdArr.forEach(function(el, i) {
          var arr_temp = el.filter(function(x) {
            var flag = true;
            if (arr.indexOf(x) != -1) return false;
            for (var j = 0; j < mdArr.length; j++)
              if (mdArr[j].indexOf(x) == -1) {
                flag = false;
                break;
              }
      
            return flag;
      
          });
          arr = arr.concat(arr_temp);
        });
      
        return arr;
      
      }
      
      alert(checkDups(mdArr));

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多