如何用forEach或函数式递归处理斜杠分隔数组生成全排列?
笛卡尔积组合生成实现(TypeScript)
你需要的输出本质是将每个输入字符串按/拆分后得到的多个集合的笛卡尔积,递归实现代码如下:
完整实现代码
function singleOptionStemGenerator(route: string[]): string[][] { // 拆分当前层级的所有可选ID const currentOptions = route[0].split('/'); // 递归终止条件:只剩最后一组选项时,直接返回每个ID包装成的单元素数组 if (route.length === 1) { return currentOptions.map(id => [id]); } // 递归获取剩余所有层级的组合结果 const restCombinations = singleOptionStemGenerator(route.slice(1)); const result: string[][] = []; // 拼接当前层级ID和后续所有组合,生成当前层级的全量组合 for (const currentId of currentOptions) { for (const restComb of restCombinations) { result.push([currentId, ...restComb]); } } return result; }
原代码问题说明
你之前的实现存在几个问题:
- 返回类型定义错误:
[string[]]是固定仅包含一个元素的数组类型,实际返回的是任意长度的二维字符串数组,应该用string[][] - 使用
splice会修改原输入数组,且你传入递归的参数是被删除的第一个元素组成的数组,逻辑完全错误,应该用slice(1)获取剩余的路径数组 - 没有收集递归返回的结果,也没有和当前层级的ID做拼接,所以无法生成完整组合
调用示例
const input = ['id1/id2', 'id3', 'id4/id5/id6']; console.log(singleOptionStemGenerator(input)); // 输出结果和你要求的完全一致
内容的提问来源于stack exchange,提问作者Bogomip
相关产品推荐
相关产品推荐

