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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 15:15:03