首页 > 解决方案 > 如何将返回的数据整理成更好的模型

问题描述

我有结构未优化的 API 数据

我不能要求后端开发人员对其进行重组,因此我希望在将模型用于我的 Angular 2 应用程序之前在本地整理模型。

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

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

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

首选结构:

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

所以从原始数据:

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

如果有人可以提供有关如何根据此规则集将数据(键/值)移动到子结构中的示例 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
      }
   ]
}

标签: javascripttypescriptangular-cli-v6

解决方案


您最初的问题要求一组用户,您的评论提到用户对象需要具有名称和权限键,将两者结合在一起,这种转换可以在一个语句中完成,如下所示,

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);


推荐阅读