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

如何按Item分组统计订单数组中Amount总和?代码异常排查

问题描述

现有包含订单对象的数组,需求是按Order.Item字段分组,统计对应Order.Amount的总和:

const sellingInfo = [
  {"OrderReceiverId":"6698eea782e24cc9d42eab7f","Order":{ "CustomerId":"669aa55079cce2e96f9a7e69","CustomerName":"Erigbemi","Date":"2024/07/19","TrackingId":"43035","Status":"Processing","Amount":{"$numberInt":"25000"},"Item":"Orange" }},
  {"OrderReceiverId":"6698eea782e24cc9d42eab7f","Order":{ "CustomerId":"669aa55079cce2e96f96t77","CustomerName":"James","Date":"2024/07/19","TrackingId":"42335","Status":"Processing","Amount":{"$numberInt":"15000"},"Item":"Tomatoes" }},
  {"OrderReceiverId":"6698eea782e24cc9d42eab7f","Order":{ "CustomerId":"669aa55079cce2e96f9a7e69","CustomerName":"Erigbemi","Date":"2024/07/19","TrackingId":"22235","Status":"Processing","Amount":{"$numberInt":"15000"},"Item":"Tomatoes" }}
];

预期输出:

{
  "Orange": 25000,
  "Tomatoes": 30000
}

尝试的JavaScript代码:

let itm = {};

sellingInfo.forEach(order => {
    const item = order.Order.Item;
    const amt = order.Order.Amount;
    
    if(!itm[item]){
        itm[item] = amt;
    }
    itm[item] += amt;
})

res.json(itm);

得到错误输出:

{
  "Orange": 50000,
  "Tomatoes": 45000
}
问题分析
  1. 数值提取错误:order.Order.Amount是包含$numberInt字段的对象,直接赋值或相加会导致类型异常,必须先提取字符串并转换为整数。
  2. 逻辑重复累加:当前代码中,无论是否完成分组初始化,都会执行一次itm[item] += amt。以Orange为例,第一次循环初始化itm["Orange"] = 25000后,又立即执行累加操作,导致结果翻倍;Tomatoes的第三个订单则在已有30000的基础上再次累加15000,最终得到45000。
修复后的代码
let itm = {};

sellingInfo.forEach(order => {
    const item = order.Order.Item;
    // 提取Amount的数值并转为整数
    const amt = parseInt(order.Order.Amount.$numberInt, 10);
    
    if (!itm[item]) {
        // 初始化分组总和为0
        itm[item] = 0;
    }
    // 仅执行一次累加
    itm[item] += amt;
})

res.json(itm);

也可以用更简洁的短路赋值逻辑:

let itm = {};

sellingInfo.forEach(order => {
    const item = order.Order.Item;
    const amt = parseInt(order.Order.Amount.$numberInt, 10);
    
    // 若分组不存在则初始化为0,再累加当前金额
    itm[item] = (itm[item] || 0) + amt;
})

res.json(itm);

执行后将得到正确的分组求和结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 15:54:51