繁体   English   中英

在 JavaScript 中合并数组数组

[英]Merge array of arrays in JavaScript

我正在尝试使用 JavaScript 在一个数组中合并两个数组,但我没有使用concat方法获得确切的输出。 谁能帮我?

  var a1= [[0, 1],[1, 5],[2,5],[3,7]];
  var a2= [[1,9],[0,6],[3,8],[2,6]];
//output 
  var result=[[0,1,6],[1,5,9],[2,5,6],[3,7,8]];

例如,对于 a1 中的每个数组,在 a2 中找到相应的(索引为零匹配的元素)数组并合并元素

我已经重新绑定的代码

 var v1 = [[0, 1],[1, 5],[2,5]]; var v2 = [[0,5],[1,6],[2,8]]; const res = v1.map((x, i) => [...new Set([...x, ...v2[i]])]); console.log(res);

如果我们“从字面上”翻译您的要求,一种解决方案可能如下所示:

 const a1 = [[0, 1], [1, 5], [2, 5], [3, 7]], a2 = [[1, 9], [0, 6], [3, 8], [2, 6]]; const result = a1.map(a1x => { // find the corresponding array const x2 = a2.find(a2x => a2x[0] === a1x[0]); // combine the values in a new array if (x2) { a1x = a1x.concat(x2); } // return an array of unique values return [...new Set(a1x)]; }); console.log(JSON.stringify(result));

将其最小化为单行取决于 OP :)

您可以使用Map ,收集按第一个元素分组的所有值,并返回一个包含键和值的数组。

 var a1 = [[0, 1], [1, 5], [2, 5], [3, 7]], a2 = [[1, 9], [0, 6], [3, 8], [2, 6]], result = Array.from( [a1, a2].reduce( (m, a) => a.reduce((n, [k, v]) => n.set(k, [...(m.get(k) || []), v]), m), new Map ), ([k, v]) => [k, ...v] ); console.log(result);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM