[英]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.