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

如何对嵌套结构JSON中的price值求和并解决重复累加问题

解决price总和重复累加的问题

我来帮你搞定这个问题!你遇到的重复累加问题其实原因很明确:每次重新计算总和前没有重置_sum的初始值,导致旧的总和和新遍历得到的结果叠加在了一起。

问题分析

第一次计算时_sum初始值是0,遍历所有item后得到正确总和;但当你添加新项再次运行代码时,_sum还保留着之前的计算结果,这时候再遍历全量列表累加,就会变成「旧总和 + 新的全量总和」,结果自然就错了。

另外还要注意一个细节:你的JSON里price字段是字符串类型(比如"10"),如果直接累加会触发字符串拼接,这也是潜在的坑,必须转成数字后再计算。

修正方案

方案1:重置累加变量(最直观)

每次计算总和前,先把_sum重置为0,确保每次都是从0开始累加最新的所有item价格:

// 关键:每次计算前重置_sum为0
let _sum = 0;
list["data"].forEach((group) => {
  // 注意要先取到group里的group_object,你之前的代码漏了这一层!
  group["group_object"]["list_object"].forEach((item) => {
    // 转成数字后再累加
    _sum += Number(item["price"]);
  });
});
console.log("当前总价格:", _sum);

方案2:使用reduce链式调用(更简洁可靠)

用reduce方法可以避免维护额外的累加变量,每次计算都是独立的,从根源上避免残留值的问题:

const calculateTotalPrice = (data) => {
  return data.reduce((total, group) => {
    // 计算当前group下所有item的价格和
    const groupTotal = group["group_object"]["list_object"].reduce((sum, item) => {
      return sum + Number(item["price"]);
    }, 0);
    return total + groupTotal;
  }, 0);
};

// 第一次计算
let total = calculateTotalPrice(list["data"]);
console.log("初始总价格:", total); // 10+5+15+3=33

// 添加新的group_object后重新计算
list["data"].push({
  "group_object": {
    "id": "3",
    "seller": "seller3",
    "list_object": [
      {"id": "1", "item_name": "Seller_3_item_1", "price": "20"}
    ]
  }
});
total = calculateTotalPrice(list["data"]);
console.log("添加新项后的总价格:", total); // 33+20=53

额外提示

  • 始终确保price转成数字类型后再计算,避免字符串拼接导致的错误(比如"10"+"5"会得到"105"而不是15)。
  • 如果你的场景是频繁添加新项,建议把计算逻辑封装成函数,每次添加后调用函数即可,代码更清晰易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 15:47:42