求助: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));
代码说明
- 终止条件:当输入数组为空(所有层级处理完毕),返回包含空数组的数组,作为组合的基础。
- 递归分解:每次只处理当前第一个层级,递归处理剩下的所有层级,得到后续的所有组合结果。
- 组合拼接:遍历当前层级的每个元素,将其与后续的每个组合进行拼接,生成新的完整组合,最终收集所有结果返回。
内容的提问来源于stack exchange,提问作者opendev
相关产品推荐
相关产品推荐

