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

如何使用Lodash实现数组对象按employeeId分组重组?

用Lodash实现对象数组按employeeId分组并重组结构

嗨,这事儿用Lodash来处理非常直观,我给你分享两种靠谱的实现方式:

方法一:_.groupBy + _.mapValues组合

这是最常用的组合,先按employeeId分组,再把每个组里的对象只保留requestValue字段:

const _ = require('lodash'); // 确保已引入Lodash

var obj = [{ employeeId: 1300000, requestValue: 2 }, { employeeId: 1300000, requestValue: 3 }, { employeeId: 1300001, requestValue: 4 }];

var result = _.mapValues(_.groupBy(obj, 'employeeId'), group => 
  group.map(item => _.pick(item, 'requestValue'))
);

console.log(result);
// 输出:{ 1300000: [ { requestValue: 2 }, { requestValue: 3 } ], 1300001: [ { requestValue: 4 } ] }

步骤拆解:

  • _.groupBy(obj, 'employeeId'):先把原数组按employeeId分组,得到的结构是{ 1300000: [原对象, 原对象], 1300001: [原对象] }
  • _.mapValues(...):遍历分组后的每个值(也就是每个组的数组),对组内的每个对象用_.pick(item, 'requestValue')只提取requestValue字段,重组新的数组。

方法二:_.transform一次性完成(更灵活)

如果想一步到位处理,_.transform可以在遍历过程中直接构建目标结构,性能上也更高效一些:

const _ = require('lodash');

var obj = [{ employeeId: 1300000, requestValue: 2 }, { employeeId: 1300000, requestValue: 3 }, { employeeId: 1300001, requestValue: 4 }];

var result = _.transform(obj, (acc, item) => {
  // 先判断当前employeeId对应的数组是否存在,不存在就初始化一个空数组
  acc[item.employeeId] = acc[item.employeeId] || [];
  // 把只包含requestValue的对象push进去
  acc[item.employeeId].push(_.pick(item, 'requestValue'));
}, {}); // 初始值是空对象

console.log(result);
// 输出和上面完全一致

小提示:

如果你觉得_.pick有点“重”,也可以手动创建新对象,效果完全一样:

acc[item.employeeId].push({ requestValue: item.requestValue });

用_.pick的好处是后续如果需要提取多个字段,直接添加字段名即可,扩展性更强。

内容的提问来源于stack exchange,提问作者Léon Jiresse

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:29:32