javascript - 如何将返回的数据整理成更好的模型
问题描述
我有结构未优化的 API 数据
我不能要求后端开发人员对其进行重组,因此我希望在将模型用于我的 Angular 2 应用程序之前在本地整理模型。
例如,我收到一个包含表格和用户数据的平面对象
{$id: "400", sqlTable: "Customer", admin: 1, test: 3}
最好过滤这些并将用户放入子对象中以加速渲染而无需条件测试等。
首选结构:
"sqlTable":"value",
"Users":[
"user1name":permission,
"user2name":permission
]
所以从原始数据:
- $id 不重要(所以被删除了)
- sqlTable 是表名
- admin 和 test 是用户
因此,如果我们删除 $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
}
]
}
解决方案
您最初的问题要求一组用户,您的评论提到用户对象需要具有名称和权限键,将两者结合在一起,这种转换可以在一个语句中完成,如下所示,
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);
推荐阅读
- typescript - 带有条件属性的接口
- php - reCAPTCHA v3 验证分数出现问题
- ios - 从 EKEventStore 获取事件的问题
- for-loop - 当循环完成时,FOR 循环中的比较值不会与正确的向量元素相关联。- 代码审查
- reactjs - redux 的 state 对象中的这些附加属性是什么?
- c# - 无法从文件加载 X.509 证书
- reactjs - 为什么即使 mapStateToProps 返回相同的 (===) 道具,我的连接组件也会重新渲染?
- r - 时间序列ggplot中x轴上的时间戳
- visual-studio - XSLT 1.0 修改配置文件替换功能
- c# - 泛型方法上的 C# 协方差