如何用lodash+TypeScript按main_role_group_id分组合并company_name数组
你可以结合lodash的_.groupBy和_.map方法实现需求,完整实现代码如下:
const _ = require('lodash'); // 原始输入数组 const originArr = [ { "main_role_group_id": 5, "company_name": "Fitzsimons PTY LTD" }, { "main_role_group_id": 1, "company_name": "APF Brisbane Pty Ltd" }, { "main_role_group_id": 5, "company_name": "Five Islands Secondary College" }, { "main_role_group_id": 1, "company_name": "General Excavators Pty Ltd" }, { "main_role_group_id": 7, "company_name": "Chubb Security - SA Office" }, { "main_role_group_id": 7, "company_name": "Stay Kool Airconditioning & Electrical Services" } ]; // 核心实现 const result = _(originArr) // 按main_role_group_id分组 .groupBy('main_role_group_id') // 遍历分组转换为目标结构 .map((groupItems, groupId) => ({ main_role_group_id: Number(groupId), company: groupItems.map(item => ({ company_name: item.company_name })) })) // 执行链式调用获取结果 .value();
逻辑说明:
- 第一步调用
_.groupBy,以main_role_group_id为分组键,将原始数组中同id的条目归为同一组,得到键为分组id、值为同组元素数组的对象 - 第二步调用
_.map遍历分组结果,将每组转换为目标结构:因为groupBy返回的对象键默认为字符串类型,此处加Number()转换为数字和原始类型保持一致;同时遍历同组元素提取company_name字段组成company数组 - 最后调用
.value()触发lodash链式调用的执行,得到符合要求的输出数组
内容的提问来源于stack exchange,提问作者khairul
相关产品推荐
相关产品推荐

