【问题标题】:Trying to map an Array to an Object - Javascript尝试将数组映射到对象 - Javascript
【发布时间】:2020-12-10 06:45:17
【问题描述】:

我正在使用 Angular 和响应式表单,并且有一个权限对象来访问页面上的项目。基本上,我正在尝试将返回的 API 对象数组映射到一组表单组。我对 formarray 不感兴趣,因为我有很多取决于数据库中的结构。

但是,尝试映射这个是最困难的。


初始结构

[
{module_name: "users", access: true, edit: true, delete: false},
{module_name: "documents", access: true, edit: false, delete: false}
]

所需结构的角形

accessControl: {
users: {access: true, edit: true, delete: false}
documents: {access: true, edit: false, delete: false}
}

【问题讨论】:

  • 您能否向我们展示您尝试映射结构的代码,我们指出您出了什么问题?

标签: javascript angular


【解决方案1】:

使用Array.prototype.reduce尝试以下操作;

const input = [{
    module_name: "users",
    access: true,
    edit: true,
    delete: false
  },
  {
    module_name: "documents",
    access: true,
    edit: false,
    delete: false
  }
];

const output = input.reduce((acc, curr) => {
  const { module_name, ...rest } = curr;
  acc[module_name] = rest;
  return acc;
}, {});

console.log(output);

【讨论】:

    【解决方案2】:

    试试这个:

    arr.forEach(module => {
       accessControl[module.module_name] = {
         access: module.access, edit: module.edit, delete: module.delete
      }
    })
    

    【讨论】:

      【解决方案3】:

      基于@Yair Cohen 的回答,但未指定从数据传递的参数:

      var accessControl = {};
      
      var data = [
          { module_name: "users", access: true, edit: true, delete: false },
          { module_name: "documents", access: true, edit: false, delete: false }
      ];
      
      data.forEach(x => {
          accessControl[x.module_name] = x;
          delete accessControl[x.module_name].module_name;
      });
      console.log({ accessControl });

      【讨论】:

      • 也不错。其实传入的参数我也不确定,还没编,所以可以扩展。谢谢
      猜你喜欢
      • 2020-11-09
      • 2022-11-24
      • 1970-01-01
      • 2019-06-06
      • 2021-04-18
      • 1970-01-01
      • 2018-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多