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

如何按指定分组键对数据项分组并求和合并其他属性值?

问题:按指定键分组并对其余属性求和汇总

给定一组数据项数组,需对除指定分组键外的所有属性值进行求和汇总。以分组键name及如下示例数据为例:

[
  {
    name: "Name1",
    amt: 100,
    tax: 10,
    total: 110,
  },
  {
    name: "Name2",
    amt: 50,
    tax: 5,
    total: 55,
  },
  {
    name: "Name1",
    amt: 70,
    tax: 7,
    total: 77,
  }
]

预期结果为:

[
  {
    name: "Name1",
    amt: 170,
    tax: 17,
    total: 187,
  },
  {
    name: "Name2",
    amt: 50,
    tax: 5,
    total: 55,
  }
]

解决方案

方法一:原生JavaScript(使用Array.reduce)

无需依赖外部库,用原生数组方法即可实现:

const groupAndSum = (data, groupKey) => {
  // 按分组键聚合数据
  const grouped = data.reduce((acc, item) => {
    const key = item[groupKey];
    // 初始化分组对象(保留分组键,其他属性设为0)
    if (!acc[key]) {
      acc[key] = { [groupKey]: key };
      Object.keys(item).forEach(k => {
        if (k !== groupKey) acc[key][k] = 0;
      });
    }
    // 对非分组键的属性累加求和
    Object.keys(item).forEach(k => {
      if (k !== groupKey) acc[key][k] += item[k];
    });
    return acc;
  }, {});

  // 将聚合后的对象转为数组返回
  return Object.values(grouped);
};

// 测试示例
const data = [
  { name: "Name1", amt: 100, tax: 10, total: 110 },
  { name: "Name2", amt: 50, tax: 5, total: 55 },
  { name: "Name1", amt: 70, tax: 7, total: 77 }
];

const result = groupAndSum(data, 'name');
console.log(result);

方法二:使用Lodash工具库

如果项目已引入Lodash,可借助其封装好的方法简化代码:

const _ = require('lodash');

const groupAndSum = (data, groupKey) => {
  // 按分组键分组
  const grouped = _.groupBy(data, groupKey);
  // 对每个分组内的对象合并求和
  return Object.values(_.mapValues(grouped, items => {
    return _.mergeWith({}, ...items, (a, b) => {
      // 数字类型属性求和,非数字属性保留原值(如分组键)
      return _.isNumber(a) ? a + b : b;
    });
  }));
};

// 测试示例
const data = [
  { name: "Name1", amt: 100, tax: 10, total: 110 },
  { name: "Name2", amt: 50, tax: 5, total: 55 },
  { name: "Name1", amt: 70, tax: 7, total: 77 }
];

const result = groupAndSum(data, 'name');
console.log(result);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 02:43:21