Typescript如何将包含命名对象列表的对象按指定字段名分组
实现方案
你可以用原生JS的数组遍历方法直接完成转换,不需要引入第三方依赖:
// 按指定字段对数组分组的通用工具函数 function groupBy(arr, groupField) { return arr.reduce((result, current) => { const fieldValue = current[groupField]; // 如果当前分组不存在就初始化空数组 if (!result[fieldValue]) { result[fieldValue] = []; } result[fieldValue].push(current); return result; }, {}); } // 处理你的目标对象,originalObj替换为你实际的源对象变量名 const processedObj = Object.fromEntries( // 遍历原对象所有顶层属性 Object.entries(originalObj).map(([topKey, itemList]) => { // 对每个属性对应的数组按type字段分组 return [topKey, groupBy(itemList, 'type')]; }) );
如果你的项目已经引入了lodash,可以直接用内置的_.groupBy方法简化代码:
const processedObj = Object.fromEntries( Object.entries(originalObj).map(([key, list]) => [key, _.groupBy(list, 'type')]) );
两种写法都能直接输出你需要的目标结构,逻辑和性能都符合常规业务场景的需求。
内容的提问来源于stack exchange,提问作者Artory
相关产品推荐
相关产品推荐

