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

如何将含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);

代码说明

  1. 用reduce初始化一个空对象acc作为最终结果容器
  2. 遍历数组中的每个对象,取出其roleMapping字段
  3. 通过Object.entries把roleMapping转成键值对数组,逐个处理
  4. 检查结果对象中是否存在当前键,不存在则创建空数组
  5. 将当前键对应的对象值推入数组,最终得到合并后的结构

这样处理后,你就能直接通过键(比如mergedResult['123'])快速获取所有对应的数据,方便访问其中的shortName或name字段。

内容的提问来源于stack exchange,提问作者Trường Nguyễn Duy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 12:53:29