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

JS如何按增量规则生成食谱食材用量的所有组合

多食材用量全组合生成方案

你当前已通过handleStretch函数生成了按食材分类的单食材用量变体二维数组stretchedRecipes,要生成覆盖所有跨食材搭配的完整食谱变体,本质是计算这个二维数组的笛卡尔积——即从每个食材对应的用量子数组中各取一个值,拼接成一套完整的食材用量配置,覆盖所有可能的用量搭配场景。

核心实现思路

  • 初始化一个仅包含空配置的临时数组,作为组合计算的起点
  • 按顺序遍历每个食材的可选用量列表,每次将当前已生成的所有半成品组合,和当前食材的每一个可选用量做拼接,生成新的临时组合列表
  • 所有食材遍历完成后,临时数组中存储的就是全量的跨食材用量组合

可直接复用的代码实现(适配现有JS逻辑语境)

/**
 * 生成所有跨食材用量组合
 * @param {Array<Array>} stretchedRecipes 二维数组,每个子数组对应单种食材的全部可选用量变体
 * @returns {Array<Array>} 全量食谱配置,每个子数组为一套完整的各食材用量方案
 */
function generateAllCombinations(stretchedRecipes) {
  // 初始状态为仅含空组合的数组
  let result = [[]]
  for (const ingredientOptions of stretchedRecipes) {
    const temp = []
    // 遍历已有半成品组合
    for (const combo of result) {
      // 拼接当前食材的每一个可选用量
      for (const option of ingredientOptions) {
        temp.push([...combo, option])
      }
    }
    result = temp
  }
  return result
}

// 对接现有逻辑的调用方式
const stretchedRecipes = handleStretch(ingredientsToStretch2) // 已实现的单食材变体生成逻辑
const allRecipeVariants = generateAllCombinations(stretchedRecipes)

效果示例:如果3种食材的可选用量档位分别是3档、2档、2档,最终会生成322=12套完整配置,完全覆盖你提到的「单食材加量其余不变」「多食材同时加量」等所有场景。

注意事项

  • 组合总数是各食材用量档位数的乘积,食材种类多、单食材档位多的时候数据量会快速上涨,建议根据业务需求提前加过滤规则(比如限制总份数增量上限、排除不符合配比要求的组合),避免内存占用过高
  • 该逻辑不依赖任何第三方库,如果使用其他编程语言,只需要按照迭代拼接的思路改写语法即可,核心计算逻辑通用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 12:10:33