如何在JavaScript中按plan字段分组并汇总amount值?
用JavaScript实现分组汇总(类似SQL GROUP BY)
当然可以用JavaScript完成这个需求,最简洁高效的方式是使用Array.prototype.reduce()方法,以下是具体实现步骤:
1. 处理原始数据
首先注意你提供的原始数据结构:plans是一个数组,里面包含了一个以数字为键的对象,我们需要先把这个对象转换成可遍历的数组:
const rawData = { plans: [{ 0 : {plan: "gold", amount: 5000}, 1: {plan: "silver", amount: 2000}, 3: {plan: "silver", amount: 1000}, 4: {plan: "gold", amount: -4000} }] }; // 提取出所有plan项的数组 const planItems = Object.values(rawData.plans[0]);
2. 使用reduce分组汇总
通过reduce遍历数组,按plan字段分组并累加amount:
const groupedResult = planItems.reduce((acc, item) => { // 如果当前plan还没在累加器里,初始化金额为0 if (!acc[item.plan]) { acc[item.plan] = { amount: 0 }; } // 累加对应plan的amount acc[item.plan].amount += item.amount; return acc; }, {}); // 如果你需要和期望结果一样包在数组里 const groupedPlans = [groupedResult];
执行后groupedPlans的结果就是你期望的:
[{ "gold" : {amount: 1000}, "silver" : {amount: 3000} }]
补充说明
reduce是处理这类聚合操作的标准方式,它通过一个累加器逐步收集结果,遍历一次数组就能完成分组和汇总,时间复杂度为O(n)。- 如果你的原始数据结构调整为
plans直接是包含plan对象的数组(而非数组嵌套对象),可以直接用rawData.plans代替Object.values(rawData.plans[0])。
内容的提问来源于stack exchange,提问作者Martin AJ
相关产品推荐
相关产品推荐

