如何在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
相关产品推荐
相关产品推荐

