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

JavaScript中JSON对象分组与值乘法计算问题求助

没问题,我来一步步教你怎么实现这个需求~

解决思路与实现步骤

核心目标很明确:按product字段分组,对每个分组计算三个关键值:count的总和、该产品对应的固定cost(从你的数据能看出同一产品的cost完全一致),以及total(count总和 × cost)。

下面我用两种常用语言分别演示实现过程,你可以根据自己的技术栈选择参考:


用JavaScript实现

1. 先准备好可操作的数据

把你给出的JSON转换成JS对象:

const result = {
  "status": "success",
  "data": [
    {"id": "39036", "name": "Steve", "product": "10", "count": "5", "cost": "4"},
    {"id": "39037", "name": "Steve", "product": "11", "count": "5", "cost": "7"},
    {"id": "39038", "name": "Steve", "product": "12", "count": "5", "cost": "2"},
    {"id": "39039", "name": "Steve", "product": "12", "count": "4", "cost": "2"},
    {"id": "39040", "name": "Steve", "product": "12", "count": "1", "cost": "2"}
  ]
};

2. 分组并计算统计值

用reduce方法完成分组与累加计算:

const groupedData = result.data.reduce((acc, item) => {
  // 把字符串类型的count和cost转成数字,避免字符串拼接错误
  const countNum = parseInt(item.count);
  const costNum = parseInt(item.cost);
  
  // 如果当前产品还没在分组里,初始化分组数据
  if (!acc[item.product]) {
    acc[item.product] = {
      product: item.product,
      count: 0,
      cost: costNum,
      total: 0
    };
  }
  
  // 累加count并更新total
  acc[item.product].count += countNum;
  acc[item.product].total = acc[item.product].count * acc[item.product].cost;
  
  return acc;
}, {});

3. 转换成你想要的输出格式

把分组后的对象转换成目标字符串格式:

const finalResult = Object.values(groupedData).map(item => 
  `(product ${item.product}, count ${item.count}, cost ${item.cost}, total ${item.total})`
);

// 打印结果
console.log(`(${finalResult.join(', ')})`);

运行后输出的结果就是你想要的:

(product 10, count 5, cost 4, total 20), (product 11, count 5, cost 7, total 35), (product 12, count 10, cost 2, total 20)

用Python实现

1. 准备数据

result = {
    "status": "success",
    "data": [
        {"id": "39036", "name": "Steve", "product": "10", "count": "5", "cost": "4"},
        {"id": "39037", "name": "Steve", "product": "11", "count": "5", "cost": "7"},
        {"id": "39038", "name": "Steve", "product": "12", "count": "5", "cost": "2"},
        {"id": "39039", "name": "Steve", "product": "12", "count": "4", "cost": "2"},
        {"id": "39040", "name": "Steve", "product": "12", "count": "1", "cost": "2"}
    ]
}

2. 分组计算

grouped = {}
for item in result['data']:
    product = item['product']
    count = int(item['count'])
    cost = int(item['cost'])
    
    # 初始化分组
    if product not in grouped:
        grouped[product] = {
            'product': product,
            'count': 0,
            'cost': cost,
            'total': 0
        }
    
    # 累加并计算total
    grouped[product]['count'] += count
    grouped[product]['total'] = grouped[product]['count'] * grouped[product]['cost']

3. 生成目标格式

final_result = [f"(product {g['product']}, count {g['count']}, cost {g['cost']}, total {g['total']})" for g in grouped.values()]
print(f"({', '.join(final_result)})")

运行后同样会输出你期望的结果。


关键注意点

  • 一定要把count和cost从字符串转成数字类型,否则做加法会变成字符串拼接,导致计算错误;
  • 因为同一产品的cost是固定的,所以只需要在初始化分组时记录一次即可,不用每次更新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:24:20