如何将返回的数据整理成更好的模型



我有未优化结构的 API 数据

我无法请求后端开发人员对其进行重组,因此我希望在 Angular 2 应用程序中使用之前在本地整理模型。

例如,我收到一个包含表格和用户数据的平面对象

{$id: "400", sqlTable: "Customer", admin: 1, test: 3}

最好过滤这些并将用户放入子对象中,以加快渲染速度,而无需条件测试等。

首选结构:

"sqlTable":"value",
"Users":[
  "user1name":permission,
  "user2name":permission
]

所以从原始数据来看:

  • $id不重要(因此被删除(
  • sqlTable 是表名
  • 管理员和测试是用户

因此,如果我们删除$id,"规则集"是任何不是 sqlTable 是用户的东西,应该移动到名为 Users 的子对象。

如果有人能提供有关如何基于此规则集将数据(键/值(移动到子结构中的示例 JS/TS,我们将不胜感激。

根据要求完整返回数据:

{  
   "$id":"399",
   "IsFailure":false,
   "IsSuccess":true,
   "Value":[  
      {  
         "$id":"400",
         "sqlTable":"Customer",
         "admin":1,
         "test":null
      },
      {  
         "$id":"401",
         "sqlTable":"CustomerAddress",
         "admin":null,
         "test":null
      },
      {  
         "$id":"402",
         "sqlTable":"NewTable",
         "admin":null,
         "test":null
      }
   ]
}
我会

在渲染之前对数据进行一些转换,如下所示:

const data = {
  $id: "399",
  IsFailure: false,
  IsSuccess: true,
  Value: [
    {
      $id: "400",
      sqlTable: "Customer",
      admin: 1,
      test: null
    },
    {
      $id: "401",
      sqlTable: "CustomerAddress",
      admin: null,
      test: null
    },
    {
      $id: "402",
      sqlTable: "NewTable",
      admin: null,
      test: null
    }
  ]
};
//we map every value in "Values"
let result = data.Value.map(table => {
  //first we create our users object, we copy the full object
  let users = { ...table };
  //then we delete extra keys that we do not want
  delete users.sqlTable;
  delete users.$id;
  //then we build the object with the new structure
  return { sqlTable: table.sqlTable, Users: users };
});
console.log(result);

您的原始问题要求用户数组,并且您的评论提到用户对象需要具有名称和权限密钥,将两者组合在一起,此转换可以在一个语句中完成,如下所示,

const result = data.Value.map(value => ({
      table: value.sqlTable,
      users: Object.entries(value).filter(([key]) => key !== "$id" && key !== "sqlTable")
        .map(([key, value]) => ({
          name: key,
          permissions: value
        }))
    }))

const data = {
  $id: "399",
  IsFailure: false,
  IsSuccess: true,
  Value: [{
      $id: "400",
      sqlTable: "Customer",
      admin: 1,
      test: null
    },
    {
      $id: "401",
      sqlTable: "CustomerAddress",
      admin: null,
      test: null
    },
    {
      $id: "402",
      sqlTable: "NewTable",
      admin: null,
      test: null
    }
  ]
};
const result = data.Value.map(value => ({
  table: value.sqlTable,
  users: Object.entries(value).filter(([key]) => key !== "$id" && key !== "sqlTable")
    .map(([key, value]) => ({
      name: key,
      permissions: value
    }))
}))
console.log(result);

相关内容

最新更新