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

如何按name属性分组对象数组并对同组数值求和?

解决按name分组并求和数值的问题

我懂你的需求啦——你已经用_.groupBy(newArray, 'name')把数组按name分好组,但还需要把每组里的数值属性加总,而不是只保留原对象数组对吧?其实只需要在分组之后,搭配_.mapValues和数组的reduce方法就能轻松搞定。

示例代码(假设数值属性是value)

首先,假设你的原始数组结构是这样的:

const newArray = [
  { name: "Apple", value: 5 },
  { name: "Banana", value: 3 },
  { name: "Apple", value: 7 },
  { name: "Orange", value: 2 },
  { name: "Banana", value: 4 }
];

接下来一步到位实现分组+求和:

// 先分组,再对每个分组的数值求和
const groupedWithSum = _.mapValues(_.groupBy(newArray, 'name'), (group) => {
  // 用reduce累加每组的value值
  return group.reduce((total, item) => total + item.value, 0);
});

console.log(groupedWithSum);
// 输出结果:{ Apple: 12, Banana: 7, Orange: 2 }

如果需要返回数组形式(而非对象)

要是你希望最终结果是包含name和总和的对象数组,可以再做一步转换:

const resultArray = Object.entries(groupedWithSum).map(([name, total]) => ({
  name,
  totalValue: total
}));

console.log(resultArray);
// 输出结果:
// [
//   { name: "Apple", totalValue: 12 },
//   { name: "Banana", totalValue: 7 },
//   { name: "Orange", totalValue: 2 }
// ]

逻辑说明

  • _.groupBy:负责把所有name相同的对象归类到同一个数组里,这一步你已经做对了;
  • _.mapValues:遍历分组后的对象,对每个分组(也就是每个同名对象数组)进行处理;
  • reduce:在每个分组内部,把所有对象的数值属性累加起来,得到该组的总和。

内容的提问来源于stack exchange,提问作者Daniel Bezerra De Menezes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:06:57