如何用Lodash将数组中同supplier属性的对象分组为数组
用Lodash实现按供应商重组数组结构
要把你的原始数组转换成目标格式,核心就是先按supplier字段分组,再把分组结果转换成指定的数组结构。直接看代码实现:
const _ = require('lodash'); // 你的原始数组 const originalSurcharges = [ { "supplier": "XXXXX", "name": "over_pkg_0", "amount": 230 }, { "supplier": "XXXXX", "name": "over_pkg_1", "amount": 54 }, { "supplier": "YYYYY", "name": "over_pkg_0", "amount": 25 }, { "supplier": "YYYYY", "name": "over_pkg_1", "amount": 25 } ]; // 实现转换 const transformedSurcharges = _.map( _.groupBy(originalSurcharges, 'supplier'), (items, supplierName) => ({ [supplierName]: items.map(item => _.omit(item, 'supplier')) }) ); console.log(transformedSurcharges);
分步解释:
- 第一步:分组:
_.groupBy(originalSurcharges, 'supplier')会把原始数组按supplier的值进行分组,得到一个键为供应商名称、值为对应条目数组的对象,比如{ XXXXX: [...], YYYYY: [...] }。 - 第二步:转换结构:用
_.map遍历分组后的对象,对每个供应商组做两件事:- 用
items.map(item => _.omit(item, 'supplier'))移除每个条目里的supplier字段,只保留name和amount; - 把处理后的数组放到一个以供应商名称为键的新对象中,最终这些对象会被收集成你需要的数组结构。
- 用
如果喜欢更紧凑的写法,还可以把代码合并成一行,逻辑完全一致:
const transformedSurcharges = _.map(_.groupBy(originalSurcharges, 'supplier'), (items, s) => ({ [s]: items.map(_.partialRight(_.omit, 'supplier')) }));
这里用_.partialRight(_.omit, 'supplier')提前绑定_.omit的第二个参数,替代了箭头函数,让代码更简洁。
内容的提问来源于stack exchange,提问作者Halufolia
相关产品推荐
相关产品推荐

