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

如何对对象数组中的数量值求和并保留Group分组值?

数组对象分组求和转换解决方案

问题回顾

给定对象数组:

var myArrayOfObjects = [{Group:'MD',qtyA:4,qtyB:5},{Group:'IL',qtyA:1,qtyB:3},{Group:'FL',qtyA:5,qtyB:5}];

需要转换为按Group分组、Total为qtyA与qtyB之和的新数组:

[{Group:'MD',Total:9},{Group:'IL',Total:4},{Group:'FL',Total:10}]

实现方案

方案一:reduce + Object.values(高效推荐)

利用reduce构建以Group为键的临时对象,再通过Object.values转换为目标数组,适合数据量大的场景:

const result = Object.values(
  myArrayOfObjects.reduce((acc, item) => {
    // 计算当前项的qtyA与qtyB之和
    const total = item.qtyA + item.qtyB;
    // 将分组信息存入累加器
    acc[item.Group] = { Group: item.Group, Total: total };
    return acc;
  }, {})
);

如果原数组存在重复Group(同一Group出现多次),需要累加Total,修改逻辑如下:

const result = Object.values(
  myArrayOfObjects.reduce((acc, item) => {
    const currentTotal = item.qtyA + item.qtyB;
    if (acc[item.Group]) {
      // 已有分组,累加Total
      acc[item.Group].Total += currentTotal;
    } else {
      // 新分组,初始化对象
      acc[item.Group] = { Group: item.Group, Total: currentTotal };
    }
    return acc;
  }, {})
);

方案二:直接用reduce维护结果数组

如果数据量较小,也可以直接在reduce里遍历结果数组查找分组,代码更直观:

const result = myArrayOfObjects.reduce((acc, item) => {
  // 查找当前Group是否已存在于结果数组
  const existingItem = acc.find(el => el.Group === item.Group);
  if (existingItem) {
    existingItem.Total += item.qtyA + item.qtyB;
  } else {
    acc.push({ Group: item.Group, Total: item.qtyA + item.qtyB });
  }
  return acc;
}, []);

注意事项

原代码中Group的值未加引号(如Group:MD),在JavaScript中会被视为未定义变量,需修正为字符串形式(Group:'MD'或Group:"MD")。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 10:55:15