追加到匹配另一个数组匹配的多维数组

时间:2017-11-28 17:56:40

标签: javascript arrays multidimensional-array matching

我有两个数组:

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循环的多种变体。我很茫然。

提前致谢。

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分:2)

使用Array#map迭代第一个数组。将每个子数组的第1项与同一索引处的第2个数组中的子数组进行比较。如果它们匹配,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);

答案 2 :(得分:0)

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

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; }