我有未优化结构的 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);