多层级如何根据子元素情况删递归删除父级

[
    {name:'A1',children:[
        {name:'B1',children:[
            {name:'C1',children:[
                {name:'D1',flag:1},
                {name:'D2',flag:2},
            ]},
            {name:'C2',children:[
                {name:'D1',flag:1},
                {name:'D2',flag:1},
            ]}
        ]},
        {name:'B2',children:[
            {name:'C1',children:[
                {name:'D1',flag:1},
                {name:'D2',flag:1},
            ]},
            {name:'C2',children:[
                {name:'D1',flag:1},
                {name:'D2',flag:1},
            ]}
        ]}
    ]}
]

需求:删除flag为1的元素,当父级元素children为空时也删除,以此类推。

阅读 2.3k
1 个回答

递归,深度优先

dep = function(list){
    console.log(list)
    if(list&&list.length){
        return list.filter(v=>{
            console.log(v)
            if(v.children){
                v.children = dep(v.children)
                if(v.children == null || v.children.length == 0) return false
            }else if(v.flag == 1){
                
                return false
            }
            return true
        })
    }
    return list
}
dep([
    {name:'A1',children:[
        {name:'B1',children:[
            {name:'C1',children:[
                {name:'D1',flag:1},
                {name:'D2',flag:2},
            ]},
            {name:'C2',children:[
                {name:'D1',flag:1},
                {name:'D2',flag:1},
            ]}
        ]},
        {name:'B2',children:[
            {name:'C1',children:[
                {name:'D1',flag:1},
                {name:'D2',flag:1},
            ]},
            {name:'C2',children:[
                {name:'D1',flag:1},
                {name:'D2',flag:1},
            ]}
        ]}
    ]}
])
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题