如何将含roleMapping的对象数组转换为同键聚合的对象?
合并对象数组中相同键的roleMapping值到对应数组
原始数据
const a = [ { roleMapping: { 123: { shortName: "1", name: "2" }, 234: { shortName: "123", name: "123" }, } }, { roleMapping: { 123: { shortName: "3", name: "4" } } }, { roleMapping: { 234: { shortName: "3", name: "4" } } } ];
期望结果
{ 123: [ { shortName: "1", name: "2" }, { shortName: "3", name: "4" } ], 234: [ { shortName: "123", name: "123" }, { shortName: "3", name: "4" } ] }
解决方案
可以用数组reduce方法结合对象遍历实现,代码如下:
const mergedResult = a.reduce((acc, current) => { // 遍历当前元素的roleMapping所有键值对 Object.entries(current.roleMapping).forEach(([key, value]) => { // 如果结果对象中没有该键,初始化空数组 if (!acc[key]) { acc[key] = []; } // 将当前值推入对应数组 acc[key].push(value); }); return acc; }, {}); console.log(mergedResult);
代码说明
- 用
reduce初始化一个空对象acc作为最终结果容器 - 遍历数组中的每个对象,取出其
roleMapping字段 - 通过
Object.entries把roleMapping转成键值对数组,逐个处理 - 检查结果对象中是否存在当前键,不存在则创建空数组
- 将当前键对应的对象值推入数组,最终得到合并后的结构
这样处理后,你就能直接通过键(比如mergedResult['123'])快速获取所有对应的数据,方便访问其中的shortName或name字段。
内容的提问来源于stack exchange,提问作者Trường Nguyễn Duy
相关产品推荐
相关产品推荐

