如何通过Lodash将数组转换为按部门分组的对象映射
用Lodash实现按部门分组的对象映射
嘿,这个需求用Lodash的组合方法就能轻松搞定,我直接给你上代码和解释:
首先,先定义你的原始员工数组:
const employees = [ ["Kevin", 22,"Psychology"], ["Cathy", 26, "Psychology"], ["David", 31, "Engineering"], ["Christine", 23, "Engineering"] ];
接下来是核心实现代码:
const _ = require('lodash'); const groupedEmployees = _.mapValues( // 第一步:按部门(数组索引2的元素)分组 _.groupBy(employees, emp => emp[2]), // 第二步:把每个分组里的数组转换成需要的对象结构 departmentGroup => departmentGroup.map(([name, age]) => ({ name, age })) );
运行这段代码后,groupedEmployees就会输出你想要的格式:
{ Psychology: [ { name: "Kevin", age: 22 }, { name: "Cathy", age: 26 } ], Engineering: [ { name: "David", age: 31 }, { name: "Christine", age: 23 } ] }
简单拆解下逻辑:
_.groupBy:这个方法会把原始数组按照指定的键(这里是每个员工数组的第3个元素,也就是部门)进行分组,得到一个以部门名为键、对应员工数组为值的临时对象。_.mapValues:遍历这个临时对象的所有值(也就是每个部门的员工数组),用Array.map解构每个员工数组的前两个元素(姓名和年龄),转换成你需要的{name, age}对象结构。
因为你提到部门的索引是固定的,所以直接用emp[2]来取部门完全没问题,这个写法既简洁又稳定~
内容的提问来源于stack exchange,提问作者Clay Banks
相关产品推荐
相关产品推荐

