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
相关产品推荐
相关产品推荐

