创建函数遍历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
相关产品推荐
相关产品推荐

