你好,我坚持根据后端响应构建一个新对象。
以下是我收到的回复
| FIRSTNAME | UPPER(CONVERT(FIRSTNAME,'US7ASCII')) |
|-----------|--------------------------------------|
| alo | ALO |
| Ângelo | ANGELO |
| pal | PAL |
| Ying | YING |
| Yogen | YOGEN |
| Yvet | YVET |
要求是过滤响应以删除所有具有false值的属性,并构造一个包含访问控制值(acl)的新数组。预期的新对象将如下所示:
acl:[
{
"user_type":5,
"user_id":"c7e5cb45ba764ad7ad29b5bdd4f12128",
"user_name":"John",
"view":true,
"modify":false,
"remove":false,
"modify_acl":false
},
{
"user_type":5,
"user_id":"f673beac0245462f8c71066536049e72",
"user_name":"Allan",
"view":true,
"modify":true,
"remove":true,
"modify_acl":false
}]
目前我正在使用reduce方法删除所有错误值。但是我坚持要构建预期的结果。
答案 0 :(得分:0)
您可以检查属性的类型,并使用布尔值来分配新的标签/值对并省略错误值。否则,取出键值对并将其分配给实际对象。
Array#map
实际上是更好的选择方法,因为它返回一个需要的数组。
通过使用Array#reduce
,累加器永远不会改变,因为它将是一个数组。
var acl = [{ user_type: 5, user_id: "c7e5cb45ba764ad7ad29b5bdd4f12128", user_name: "John", view: true, modify: false, remove: false, modify_acl: false }, { user_type: 5, user_id: "f673beac0245462f8c71066536049e72", user_name: "Allan", view: true, modify: true, remove: true, modify_acl: false }],
result = acl.map(o => {
var r = {},
acl = [];
Object.entries(o).forEach(([k, v]) => {
if (typeof v === 'boolean') {
v && acl.push({ value: k, label: v });
} else {
r[k] = v;
}
});
return Object.assign(r, { acl });
});
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }