我有一个访问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数组中不存在“ 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);
为了使函数具有递归性,它需要自行调用。如果您需要有关其工作原理的更多说明,请告诉我。
const input = {
"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"
]
}
}]
}
]
}]
}
const role = "Manager";
const removeRoles = (tree, role) => {
const newTree = []
for (const item of tree) {
if (item.data.roles.includes(role)) {
if (item.children) {
item.children = removeRoles(item.children, role) // this is where it gets recursive
}
newTree.push(item)
}
}
return newTree;
}
const result = { data: removeRoles(input.data, role) }
console.log(result);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句