【发布时间】:2021-02-08 10:05:40
【问题描述】:
我有一个如下所示的访问 JSON 对象
{
"data": [
{
"label": "Self Service",
"data": {
"roles": [
"Employee",
"Manager",
"System Administrator"
]
},
"children": [
{
"label": "Attendance",
"icon": "pi pi-file",
"data": {
"roles": [
"Employee",
"System Administrator"
]
},
"children": [
{
"label": "Clocking",
"icon": "pi pi-file",
"data": {
"roles": [
"Employee",
"System Administrator"
],
"routerLink": ["ESS-ATT-clocking"]
}
},
{
"label": "History",
"icon": "pi pi-file",
"data": {
"roles": [
"Employee",
"System Administrator"
]
}
}
]
},
{
"label": "Claim",
"icon": "pi pi-file",
"data": {
"roles": [
"Manager",
"System Administrator"
]
},
"children": [
{
"label": "Entitlement & Request",
"icon": "pi pi-file",
"data": {
"roles": [
"Manager",
"System Administrator"
]
}
}
]
}
]
},
]
}
存储在变量accessCtrl中。我还有一个变量
role = "Employee"
每个子节点都与“children”属性相连。 如果 data.role 数组中不存在“角色”,我如何循环(递归)删除整个 JSON 对象“accessCtrl”并删除特定节点?
例如
role = "Manager"
对象应该返回
{
"data": [
{
"label": "Self Service",
"data": {
"roles": [
"Employee",
"Manager",
"System Administrator"
]
},
"children": [
{
"label": "Claim",
"icon": "pi pi-file",
"data": {
"roles": [
"Manager",
"System Administrator"
]
},
"children": [
{
"label": "Entitlement & Request",
"icon": "pi pi-file",
"data": {
"roles": [
"Manager",
"System Administrator"
]
}
}
]
}
]
},
]
}
这是我当前的代码,它似乎无法正常工作。
function removeNode(obj, parent) {
for (let prop in obj) {
if (
prop === "data" &&
prop.hasOwnProperty("roles") &&
!prop.roles.includes(this.role)
) {
if (parent) {
delete parent.children;
}
} else if (typeof obj[prop] === "object") removeNode(obj[prop], obj);
}
}
removeNode(this.accessCtrl, null);
console.log("this.accessCtrl=", this.accessCtrl);
【问题讨论】:
标签: javascript json recursion javascript-objects