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

如何在Lodash分组数组中对quantity属性求和?

Lodash分组数组的quantity属性求和实现方法

我有一个通过Lodash的groupBy方法得到的订阅分组对象,希望对每组内的quantity属性求和并返回指定格式的结果。

示例输入

{
  sub_1MT4LuP6DArCazGmEdJd: [
    {
      id: 'prod_HleWjM6culM',
      quantity: 1,
    },
    {
      id: 'prod_HleWjM6culM',
      quantity: 3,
    }
  ]
}

期望输出

{
  sub_1MT4LuP6DArCazGmEdJd: [
    {
      totalQuantity: 4,
    },
  ]
}

最优实现方法

使用Lodash的_.mapValues和_.sumBy组合,简洁高效地完成分组后的数据转换与求和:

// 假设已通过groupBy得到分组数据
const groupedSubscriptions = {
  sub_1MT4LuP6DArCazGmEdJd: [
    { id: 'prod_HleWjM6culM', quantity: 1 },
    { id: 'prod_HleWjM6culM', quantity: 3 }
  ]
};

// 计算每组的quantity总和并转换格式
const summedResult = _.mapValues(groupedSubscriptions, items => [
  { totalQuantity: _.sumBy(items, 'quantity') }
]);

console.log(summedResult);

代码说明

  • _.mapValues:遍历分组对象的所有键值对,对每组数组进行处理
  • _.sumBy:接收目标数组和要求和的属性名quantity,直接计算该组所有元素的quantity总和
  • 最后将求和结果包装为[{ totalQuantity: 总和 }]的数组格式,完全匹配期望输出

如果需要处理分组内存在不同id的场景(即按id分别求和),可以嵌套使用_.groupBy和_.mapValues:

const groupedSubscriptions = {
  sub_1MT4LuP6DArCazGmEdJd: [
    { id: 'prod_A', quantity: 1 },
    { id: 'prod_B', quantity: 3 },
    { id: 'prod_A', quantity: 2 }
  ]
};

const summedResult = _.mapValues(groupedSubscriptions, items => 
  Object.values(_.mapValues(_.groupBy(items, 'id'), group => ({
    id: group[0].id,
    totalQuantity: _.sumBy(group, 'quantity')
  })))
);

内容的提问来源于stack exchange,提问作者Rafael Polonio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 04:01:14