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

JavaScript:如何将固定层级flatMap排列函数改造成递归动态版本

实现任意长度排列组合的递归flatMap版函数

核心思路

把多层flatMap的嵌套逻辑转化为递归调用:每次处理一组选项,将当前已拼接的前缀与当前组的每个选项拼接,直到所有选项组都处理完成时返回最终拼接结果。

实现代码

function getPermutations(optionsList) {
  // 递归处理函数:参数为当前处理到的选项组索引、当前已拼接的前缀
  const recursiveFlatMap = (index, prefix) => {
    const currentOptions = optionsList[index].options;
    // 已经处理到最后一组选项,直接返回前缀和当前选项的拼接结果
    if (index === optionsList.length - 1) {
      return currentOptions.map(item => `${prefix} ${item}`.trim());
    }
    // 不是最后一组,继续递归flatMap下一组
    return currentOptions.flatMap(item => {
      const newPrefix = prefix ? `${prefix} ${item}` : item;
      return recursiveFlatMap(index + 1, newPrefix);
    });
  };
  // 边界判断:输入为空直接返回空数组
  if (!optionsList || optionsList.length === 0) return [];
  // 从第0组、空前缀开始递归
  return recursiveFlatMap(0, '');
}

测试验证

// 原3组选项的测试用例
const testOptions = [{
  "options": ['blue', 'gray', 'green']
}, {
  "options": ['large', 'medium', 'small']
}, {
  "options": ['wood', 'steel', 'plastic']
}];
console.log('3组选项的排列结果', getPermutations(testOptions));

// 新增测试:2组选项的情况
const testOptions2 = [{
  options: ['男','女']
}, {
  options: ['18岁以下','18-30岁','30岁以上']
}];
console.log('2组选项的排列结果', getPermutations(testOptions2));

// 新增测试:4组选项的情况
const testOptions3 = [...testOptions, {options: ['圆形','方形','异形']}];
console.log('4组选项的排列结果', getPermutations(testOptions3));

特性说明

  • 支持传入任意长度(≥1)的选项组数组,自动适配嵌套层级
  • 输出格式和原函数完全一致,为空格分隔的排列字符串数组
  • 做了空输入的边界处理,避免运行报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 18:45:09