在多个数组中组合“列”
Posted
技术标签:
【中文标题】在多个数组中组合“列”【英文标题】:combining "columns" in multiple arrays 【发布时间】:2021-03-01 22:47:04 【问题描述】:我有一个数组数组:
var arr = [
[0, 3, 3],
[0, 4, 3],
[1, 3, 4],
[1, 4, 4]
];
我想创建一个新数组,它结合了内部数组的每个索引的内容。例如,每个内部数组的索引 0 处的第一个元素是 0、0、1 和 1。我想创建一个组合这些元素的新数组,以便最终得到 [0, 1](我不'不想在新数组中重复)。下一个“列”是 3、4、3 和 4。所以我想要一个 [3, 4] 数组。
我想要的最终结果是
[
[0, 1],
[3, 4],
[3, 4]
]
我不知道该怎么做。
【问题讨论】:
嘿@XtevensChannel,请查看此链接 (***.com/help/how-to-ask),了解如何提出 *** 问题。我建议您发布您已经尝试过的代码,以便我们尝试帮助修复您可能犯的任何错误。 从您的答案中,您希望删除重复项,然后转置矩阵。我会先转置(***.com/questions/49444856/…),然后删除重复项(***.com/questions/50935662/…)。 【参考方案1】:可能不是最有效的,但确实满足您的隐秘要求。
var arr = [
[0, 3, 3],
[0, 4, 3],
[1, 3, 4],
[1, 4, 4]
];
const unique = (myArray) => [...new Set(myArray)];
let x, y,
tarr = [], // temp array
farr = []; // final array
for (x=0; x<arr.length; x++)
tarr.length = 0;
for (y=0; y<arr[x].length; y++)
tarr.push(arr[y][x])
farr.push( unique(tarr) );
console.log(farr.join('\n'));
【讨论】:
【参考方案2】:这里有另一个解决方案。
const result = (arr) =>
let index = 0;
const min = Math.min(...arr.map(r => r.length)) // get min length
const grid = [];
while (index < min) // loop with min
let s = new Set(); // using set to keep unique values
arr.forEach(r => s.add(r[index])); // pick value
grid.push([...s]); // get array from set
index++;
return grid
const array = [ [0, 3, 3], [0, 4, 3], [1, 3, 4], [1, 4, 4] ];
console.log(result(array))
【讨论】:
以上是关于在多个数组中组合“列”的主要内容,如果未能解决你的问题,请参考以下文章