在多个数组中组合“列”

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))

【讨论】:

以上是关于在多个数组中组合“列”的主要内容,如果未能解决你的问题,请参考以下文章

js多个(N)个数组的的元素组合排序算法,多维数组的排列组合或多个数组之间的排列组合

如何从多个数组中获取所有组合?

JavaScript,从几个数组中获取所有唯一组合[重复]

将多个数组合并为一个数组而不重复[重复]

leetcode算法实例---组合和枚举问题

leetcode算法实例---组合和枚举问题