You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:JavaScript中多层对象数组的全组合实现方案

用递归实现对象数组的所有可能组合

需求说明

给定多层级的对象数组,生成所有可能的组合(每个层级选一个元素,组成新数组),采用递归方案实现。

输入示例

[
  [{
    level: 1,
    value: "a"
  }, {
    level: 1,
    value: "b"
  }],
  [{
    level: 2,
    value: "c"
  }, {
    level: 2,
    value: "d"
  }],
  [{
    level: 3,
    value: "e"
  }, {
    level: 3,
    value: "f"
  }]
]

预期输出

[
  [{ level: 1, value: "a" }, { level: 2, value: "c" }, { level: 3, value: "e" }],
  [{ level: 1, value: "a" }, { level: 2, value: "c" }, { level: 3, value: "f" }],
  [{ level: 1, value: "a" }, { level: 2, value: "d" }, { level: 3, value: "e" }],
  [{ level: 1, value: "a" }, { level: 2, value: "d" }, { level: 3, value: "f" }],
  [{ level: 1, value: "b" }, { level: 2, value: "c" }, { level: 3, value: "e" }],
  [{ level: 1, value: "b" }, { level: 2, value: "c" }, { level: 3, value: "f" }],
  [{ level: 1, value: "b" }, { level: 2, value: "d" }, { level: 3, value: "e" }],
  [{ level: 1, value: "b" }, { level: 2, value: "d" }, { level: 3, value: "f" }]
]

递归实现代码

function generateCombinations(arrays) {
  // 终止条件:没有剩余层级时,返回空数组的组合
  if (arrays.length === 0) return [[]];

  // 取出当前要处理的层级
  const currentLayer = arrays[0];
  // 递归获取后续所有层级的组合
  const remainingCombos = generateCombinations(arrays.slice(1));

  // 拼接当前层级元素与后续组合
  const result = [];
  for (const item of currentLayer) {
    for (const combo of remainingCombos) {
      result.push([item, ...combo]);
    }
  }

  return result;
}

// 测试用例
const input = [
  [{ level: 1, value: "a" }, { level: 1, value: "b" }],
  [{ level: 2, value: "c" }, { level: 2, value: "d" }],
  [{ level: 3, value: "e" }, { level: 3, value: "f" }]
];

// 执行并打印结果
console.log(JSON.stringify(generateCombinations(input), null, 2));

代码说明

  1. 终止条件:当输入数组为空(所有层级处理完毕),返回包含空数组的数组,作为组合的基础。
  2. 递归分解:每次只处理当前第一个层级,递归处理剩下的所有层级,得到后续的所有组合结果。
  3. 组合拼接:遍历当前层级的每个元素,将其与后续的每个组合进行拼接,生成新的完整组合,最终收集所有结果返回。

内容的提问来源于stack exchange,提问作者opendev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 02:35:19