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

如何对变量内字符串子串形式的数字进行匹配求和?

实现带相同名称的数字+字符串变量合并方案

核心逻辑是先拆分每个字符串的数值和文本部分,再按文本部分分组累加数值,最后拼接为结果字符串。

步骤1:编写拆分字符串的工具函数

先把类似"1 apple"、"2 apple"这样的字符串拆成数值和食材名称两部分:

function parseIngredient(ingStr) {
  // 匹配开头的数字部分,剩下的内容全部作为食材名称(自动去除前后空格)
  const match = ingStr.match(/^(\d+)\s+(.*)$/);
  if (!match) return { count: 0, name: ingStr.trim() };
  return {
    count: parseInt(match[1], 10),
    name: match[2].trim()
  };
}

步骤2:批量合并食材清单

支持2个及以上的食材合并,你可以把所有要合并的食材字符串放进数组统一处理:

function mergeIngredients(ingredientList) {
  const countMap = {};
  // 遍历所有食材统计数量
  ingredientList.forEach(ing => {
    const { count, name } = parseIngredient(ing);
    // 相同名称自动累加
    countMap[name] = (countMap[name] || 0) + count;
  });
  // 转换为最终结果数组,你可以自行接入已经写好的单复数处理逻辑
  return Object.entries(countMap).map(([name, totalCount]) => {
    // 示例单复数逻辑,可替换为你自己的实现
    return `${totalCount} ${name}${totalCount > 1 ? 's' : ''}`;
  });
}

步骤3:调用示例

let ingredient1 = 1 + " apple";
let ingredient2 = 2 + " apple";
// 支持任意数量的食材合并,新增其他品类食材也能自动分类统计
const totalIngredients = mergeIngredients([ingredient1, ingredient2]);
console.log(totalIngredients); // 输出 ["3 apples"]

逻辑说明

  • 正则拆分方式不受食材名带空格的影响,比如"2 ice cream"也能正确识别名称为ice cream
  • 用对象做映射自动匹配相同食材,只有完全一致的食材名称才会累加,不会误合并不同品类
  • 支持传入任意多的食材字符串,不需要单独适配两个变量的特殊情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:45:03