根据孩子的状况递归删除“父母”财产

Weilies

我有一个访问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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据父母集合中的孩子计算的财产

来自分类Dev

根据父母集合中的孩子计算的财产

来自分类Dev

LINQ-根据上一个孩子的状况获得父母

来自分类Dev

如何从孩子那里获得父母的财产?

来自分类Dev

如何从孩子那里获得父母的财产?

来自分类Dev

一旦添加新的孩子,JavaFX便将孩子的财产绑定到其父母的财产

来自分类Dev

jQuery删除孩子并返回父母

来自分类Dev

删除与父母失踪的孩子记录

来自分类Dev

父母poms可以从孩子那里获得财产吗?

来自分类Dev

JOINTJS:递归地让孩子成为父母

来自分类Dev

递归Linq-子级财产的父母指示?

来自分类Dev

递归Linq-子级财产的父母指示?

来自分类Dev

根据孩子ID SQL获取父母

来自分类Dev

根据父母的要求填写孩子的背景

来自分类Dev

根据孩子ID SQL获取父母

来自分类Dev

如何根据多个孩子django过滤父母

来自分类Dev

如何根据父母父母扩大孩子的身高

来自分类Dev

如何级联删除从孩子到父母

来自分类Dev

如何按父母分组并收集gremlin中孩子的所有财产价值?

来自分类Dev

我可以使用Eloquent通过父母的财产订购一批孩子吗?

来自分类Dev

递归地从单亲父母那里获得所有孩子

来自分类Dev

如何根据孩子的喜好使父母的div伸展?

来自分类Dev

jQuery根据与父母匹配的类选择器查找孩子

来自分类Dev

如何根据孩子的喜好使父母的div伸展?

来自分类Dev

jQuery-如何根据孩子的属性选择父母?

来自分类Dev

递归地遍历对象以找到孩子,并沿途拾起父母,祖父母等

来自分类Dev

递归地遍历对象以找到孩子,并沿途拾起父母,祖父母等

来自分类Dev

Rails 4+最佳做法:在保留孩子的同时删除父母

来自分类Dev

在Hibernate中无法删除没有孩子的父母

Related 相关文章

  1. 1

    根据父母集合中的孩子计算的财产

  2. 2

    根据父母集合中的孩子计算的财产

  3. 3

    LINQ-根据上一个孩子的状况获得父母

  4. 4

    如何从孩子那里获得父母的财产?

  5. 5

    如何从孩子那里获得父母的财产?

  6. 6

    一旦添加新的孩子,JavaFX便将孩子的财产绑定到其父母的财产

  7. 7

    jQuery删除孩子并返回父母

  8. 8

    删除与父母失踪的孩子记录

  9. 9

    父母poms可以从孩子那里获得财产吗?

  10. 10

    JOINTJS:递归地让孩子成为父母

  11. 11

    递归Linq-子级财产的父母指示?

  12. 12

    递归Linq-子级财产的父母指示?

  13. 13

    根据孩子ID SQL获取父母

  14. 14

    根据父母的要求填写孩子的背景

  15. 15

    根据孩子ID SQL获取父母

  16. 16

    如何根据多个孩子django过滤父母

  17. 17

    如何根据父母父母扩大孩子的身高

  18. 18

    如何级联删除从孩子到父母

  19. 19

    如何按父母分组并收集gremlin中孩子的所有财产价值?

  20. 20

    我可以使用Eloquent通过父母的财产订购一批孩子吗?

  21. 21

    递归地从单亲父母那里获得所有孩子

  22. 22

    如何根据孩子的喜好使父母的div伸展?

  23. 23

    jQuery根据与父母匹配的类选择器查找孩子

  24. 24

    如何根据孩子的喜好使父母的div伸展?

  25. 25

    jQuery-如何根据孩子的属性选择父母?

  26. 26

    递归地遍历对象以找到孩子,并沿途拾起父母,祖父母等

  27. 27

    递归地遍历对象以找到孩子,并沿途拾起父母,祖父母等

  28. 28

    Rails 4+最佳做法:在保留孩子的同时删除父母

  29. 29

    在Hibernate中无法删除没有孩子的父母

热门标签

归档