javascript - 将嵌套对象键映射到另一个键

标签 javascript arrays javascript-objects

使用以下对象,如何将 roles => name 添加到 sites => userPermission 对象具有匹配的 roleId

例如,第一个 sites 条目的 userPermission 键将更新为:

 "userPermission": {
   "roleId": 6,
   "roleName": "Field Representative"
 }

一旦映射了roleName键,就不再需要roles数组,并且可以将其从最终结果中删除,如预期结果所示.

const obj = {
  "id": 542,
  "createdAt": "2018-12-06T22:34:12.553Z",
  "sites": [
    {
      "id": 10,
      "siteId": "sixtysixone",
      "edition": "pro",
      "userPermission": {
        "roleId": 6
      }
    },
    {
      "id": 2,
      "siteId": "amplify",
      "edition": "pro",
      "userPermission": {
        "roleId": 4
      }
    }
  ],
  "roles": [
    {
      "id": 6,
      "name": "Field Representative"
    },
    {
      "id": 4,
      "name": "Program Manager"
    }
  ]
};

预期结果:

const outcome = {
  "id": 542,
  "createdAt": "2018-12-06T22:34:12.553Z",
  "sites": [
    {
      "id": 10,
      "siteId": "sixtysixone",
      "edition": "pro",
      "userPermission": {
        "roleId": 6,
        "roleName": "Field Representative"
      }
    },
    {
      "id": 2,
      "siteId": "amplify",
      "edition": "pro",
      "userPermission": {
        "roleId": 4
        "roleName": "Program Manager"
      }
    }
  ]
};

我尝试过结合使用 .map.find,但感觉有一种更简单/可读的方法来实现此目的。

const outcome = obj.map(o => ({
  ...o,
  sites: o.sites
    .map(s => ({
      ...s,
      roleName: o.roles
        .find(r => r.id === s.roleId).name,
   })),
}));

最佳答案

创建 Angular 色 map :

 const roles = new Map(obj.roles.map(({ id, name }) => [id, { roleId: id, roleName: name }]));

然后你就可以查找:

const outcome = {
  ...obj,
  sites: obj.sites.map(site => ({ 
    ...site,
    userPermission: roles.get(site.userPermission.roleId),
  }),
  roles: undefined,
};

关于javascript - 将嵌套对象键映射到另一个键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54830560/

相关文章:

javascript - 什么是 JSTH_keys()?

java - 遍历一个大数组

javascript - 如何使用相同的原型(prototype)继承javascript oops中的公共(public)属性?

javascript - Chrome 控制台中奇怪的 "e"或 "t"表示什么

python - 使用 python 将 JavaScript 对象转换为 JSON

javascript - 独立网络应用程序链接脚本 - 阻止它附加具有特定类的链接?

javascript - 仅对表的几行进行排序 - jquery/javascript

javascript - http-proxy-middleware,如何复制所有/cookie header

python - 获取包含另一个元素的数组中元素的索引

Excel VBA 中的数组。在某些时候,它会放置 NA 而不是 value