求助一个关于排列组合的算法

先贴一段代码

const arr = [[], [], [], ...]   // 一个不定长度的二维数组
const data = []

if (arr.length == 2) {
  let p0 = arr[0]
  let p1 = arr[1]

  for (let x = 0; x < p0.length; x++) {
    for (let y = 0; y < p1.length; y++) {
      data.push([p0[x], p1[y]])
    }
  }
}

if (arr.length == 3) {
  let p0 = arr[0]
  let p1 = arr[1]
  let p2 = arr[2]

  for (let x = 0; x < p0.length; x++) {
    for (let y = 0; y < p1.length; y++) {
      for (let z = 0; z < p2.length; z++) {
        data.push([p0[x], p1[y], p2[z]])
      }
    }
  }
}

// ...

console.log(data)

哪位大神能把它抽象成一个函数,估计是要用到递归的

阅读 2.2k
1 个回答

try

  function cartesianProduct(a) {
    let i, j, l, m, a1, o = [];
    if (!a || a.length == 0) return a
    a1 = a.splice(0, 1)[0]
    a = cartesianProduct(a);
    for (i = 0, l = a1.length; i < l; i++) {
      if (a && a.length) for (j = 0, m = a.length; j < m; j++)
        o.push([a1[i]].concat(a[j]))
      else
        o.push([a1[i]])
    }
    return o
  }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题