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

如何按相同值重组对象?求基于Lodash的优雅实现方案

基于Lodash实现按name属性分组的优雅方案

原始数据:

[
  {name: 3, q: 10, b: 1},
  {name: 5, q: 6, b: 2},
  {name: 5, q: 7, b: 1}
]

目标结构:

[
  {name: 3, items: [{q:10, b: 1}]},
  {name: 5, items: [{q:6, b: 2}, {q:7, b: 1}]}
]

可以通过Lodash的_.groupBy结合_.map实现,代码如下:

const _ = require('lodash');

const data = [
  {name: 3, q: 10, b: 1},
  {name: 5, q: 6, b: 2},
  {name: 5, q: 7, b: 1}
];

const result = _.map(_.groupBy(data, 'name'), (items, name) => ({
  name: Number(name), // 转换为数字匹配目标结构的类型要求
  items: _.map(items, ({name, ...rest}) => rest) // 移除子项中的name属性
}));

console.log(result);

代码说明:

  1. _.groupBy(data, 'name'):按name属性对原始数组分组,得到以name值为键、对应子数组为值的对象,结构示例:{ '3': [...], '5': [...] }。
  2. 外层_.map:遍历分组后的对象,将每个键值对转换为目标格式的对象。
  3. Number(name):由于_.groupBy返回的键是字符串类型,这里转为数字以匹配目标结构中name的数字类型。若允许name为字符串,可省略此转换。
  4. 内层_.map:对每个分组的子项,剔除name属性,仅保留其他字段组成items数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 18:32:07