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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 03:01:05