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

创建函数遍历JSON对象'menu'嵌套键并执行指定算术运算

没问题,我来帮你实现这个需求。下面是具体的函数实现、计算逻辑说明,以及对应你给出的示例的验证:

1. 函数实现(以JavaScript为例)

首先我们需要一个函数来遍历JSON对象menu,提取所有嵌套的potatoes、tomatoes、carrots数值,然后执行指定的算术运算。这里考虑到menu可能存在多层嵌套结构,我们用递归遍历的方式确保不会遗漏任何目标键值:

function calculateMenuValue(menu) {
  // 初始化变量存储各数值的总和
  let sumPotatoes = 0;
  let sumTomatoes = 0;
  let sumCarrots = 0;
  let productSum = 0; // 存储每个条目内tomatoes*potatoes的乘积之和(对应你的示例逻辑)

  // 递归遍历函数
  function traverse(obj) {
    for (const key in obj) {
      if (typeof obj[key] === 'object' && obj[key] !== null) {
        // 遇到对象/数组时继续递归遍历
        traverse(obj[key]);
      } else {
        // 遇到数值时,根据键名累加对应总和
        switch(key) {
          case 'potatoes':
            sumPotatoes += obj[key];
            break;
          case 'tomatoes':
            sumTomatoes += obj[key];
            break;
          case 'carrots':
            sumCarrots += obj[key];
            break;
        }
      }
    }
    // 额外处理同一条目内的tomato与potato乘积(匹配示例逻辑)
    if (obj.hasOwnProperty('potatoes') && obj.hasOwnProperty('tomatoes')) {
      productSum += obj.tomatoes * obj.potatoes;
    }
  }

  // 启动遍历
  traverse(menu);

  // 计算两种逻辑的结果(适配描述与示例的差异)
  const resultByDescription = (sumTomatoes * sumPotatoes) / sumCarrots;
  const resultByExample = productSum / sumCarrots;

  // 返回结果及计算属性(用于验证)
  return {
    resultByDescription,
    resultByExample,
    calculationProps: {
      sumPotatoes,
      sumTomatoes,
      sumCarrots,
      productSum
    }
  };
}
2. 示例验证

假设你的menu对象如下(完全匹配你给出的示例数值):

const menu = {
  dishes: [
    {
      name: "Dish 1",
      potatoes: 2.083488,
      tomatoes: 8,
      carrots: 180
    },
    {
      name: "Dish 2",
      potatoes: 1.5,
      tomatoes: 40,
      carrots: 180
    }
  ]
};

调用函数后:

const calculationResult = calculateMenuValue(menu);
console.log(calculationResult.resultByExample); 
// 输出:(8*2.083488 + 40*1.5)/(180+180) ≈ 76.667904 / 360 ≈ 0.212966
console.log(calculationResult.calculationProps);
// 输出:{ sumPotatoes: 3.583488, sumTomatoes: 48, sumCarrots: 360, productSum: 76.667904 }
3. 逻辑说明

这里需要注意你描述的运算规则和示例的细微差异:

  • 按你文字描述的逻辑:先求所有potatoes的总和,再乘以所有tomatoes的总和,最后除以carrots的总和 → (sumPotatoes * sumTomatoes) / sumCarrots
  • 按你给出的示例逻辑:计算每个条目内tomatoes与potatoes的乘积,将所有乘积求和后,再除以carrots的总和 → sum(tomatoes[i] * potatoes[i]) / sumCarrots

你可以根据实际业务需求选择对应的计算方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:35:17