首页 > 解决方案 > 从多个嵌套数组中提取值组合的问题

问题描述

尝试遍历多个嵌套数组以获取新数组中可能值的每个组合。

例子:

[
  ['a1', 'a2'],
  ['b1', 'b2'],
  ['c1', 'c2']
]

输出:

[
   ['a1'],
   ['a2'],
   ['b1'],
   ['b2'],
   ['c1'],
   ['c2'],
   ['a1', 'b1'],
   ['a1', 'b2'],
   ['a1', 'c1'],
   ['a1', 'c2'],
   ['a2', 'b1'],
   ['a2', 'b2'],
   ['a2', 'c1'],
   ['a2', 'c2'],
   ['b1', 'c1'],
   ['b1', 'c2'],
   ['b2', 'c1'],
   ['b2', 'c2']
]

知道如何实现这一点,也许我首先需要拆分数组?

标签: javascriptarrays

解决方案


您可以使用两个嵌套for循环和一个参数创建递归函数来保持当前行迭代计数,以便您可以从那里开始下一个 for 循环。

const data = [['a1', 'a2'], ['b1', 'b2'], ['c1', 'c2']]
const res = []

function comb(data, n = 0, prev = []) {
  for (var i = n; i < data.length; i++) {
    for (var j = 0; j < data[i].length; j++) {
      let el = data[i][j]
      let arr = prev.concat(el);
      if (arr.length <= data[i].length) res.push(arr)
      comb(data, i + 1, arr)
    }
  }
}

comb(data)
console.log(JSON.stringify(res))


推荐阅读