【问题标题】:Append To Multi-dimensional array where matching matching another array追加到匹配另一个数组的多维数组
【发布时间】:2018-05-12 07:00:07
【问题描述】:

我有两个数组:

a = [
  [a, b],
  [c, d],
  [e, f],
  [g, h]
]

b = [
  [a, 4],
  [1, 2],
  [e, 3]
]

a[i][0],匹配b[i][0]时,我需要给a的当前索引添加一个值。对于这个例子,当a[0][1] 匹配b[0][1] 时,a[0][1] 应该看起来像[a,b,new_value]

如果这意味着用a 的所有值创建一个新数组,那很好,但a 的原始值和顺序不能改变。

我尝试了许多 for 循环和反向 for 循环的变体。我很茫然。

提前致谢。

【问题讨论】:

  • 请同时添加结果。
  • 如果您可以为您的示例提供一个完整的结果,那将有助于提出解决方案。

标签: javascript arrays multidimensional-array matching


【解决方案1】:

如果给定数组的长度不同,您可以使用默认值映射检查结果。

var array1 = [['a', 'b'], ['c', 'd'], ['e', 'f'], ['g', 'h']],
    array2 = [['a', 4], [1, 2], ['e', 3]],
    result = array1.map((a, i) => a.concat(a[0] === (array2[i] || [])[0] ? array2[i][1] : []));
    
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

    【解决方案2】:

    使用Array#map 迭代第一个数组。将每个子数组的第一项与第二个数组中相同索引处的子数组进行比较。如果它们匹配,concat 从第一个数组到子数组的值,并返回它。如果不是,则返回子数组。

    注意: concat 和 map 创建新的数组,不要改变原来的。

    var a = [["a","b"],["c","d"],["e","f"],["g","h"]];
    
    var b = [["a",4],[1,2],["e",3]];
         
    var result = a.map(function(item, i) {
      return b[i] && item[0] === b[i][0] ? item.concat(b[i][1]) : item; // replace b[i][1] with whatever value you want to add
    });
    
    console.log(result);

    【讨论】:

      【解决方案3】:

      地图+查找还不错。对于a数组的每一项,查看b数组中是否有匹配的元素,如果有,添加你的新值:

      const a = [
        ["a","b"],
        ["c","d"],
        ["e","f"],
        ["g","h"],
      ];
      
      const b = [
        ["a",4],
        [1,2],
        ["e",3],
      ];
      
      const mapped = a.map(x => {
        const match = b.find(y => y[0] === x[0]);
        if (match) return [...x, "new value"] // Replace "new value" with whatever you want to add...
        return x;
      });
      
      console.log(mapped)

      【讨论】:

        猜你喜欢
        • 2021-11-02
        • 1970-01-01
        • 2020-05-29
        • 1970-01-01
        • 2011-07-09
        • 2012-01-16
        • 1970-01-01
        • 1970-01-01
        • 2012-07-31
        相关资源
        最近更新 更多