一个关于递归算法的问题

我想找出isFolder全为true的对象,并且返回的新数组的目录层次结构不会改变
也就是把数组中对象isFolder为false的删除掉
可是我这样写没有达到我的目的,不知道为什么

我写的函数

function loop(data) {
        return data.filter((item) => {
            if (item.isFolder) {
                loop(item.children);
                return item
            }
        })
    }

原数组

let data2 = [
        {
            "isFolder": false
        },
        {
            "isFolder": true,
            "children": [
                {
                    "isFolder": false
                },
                {
                    "isFolder": true,
                    "children": [
                        {
                            "isFolder": false
                        },
                    ]
                }
            ]
        }
    ]
      

期望得到的新数组

 [{
                "isFolder": true,
                "children": [
                    {
                        "isFolder": true,
                        "children": []
                    }
                ]
            }]
阅读 2.3k
2 个回答

loop会返回一个数组, 你的回调中这个返回的数组毫无作用

function loop(a) {
    if(a.isFolder) {
        a.children = a.children.filter(loop)
        return true
    }
}

data2.filter(loop)

因为你只是返回了第一次filter的结果 item.children的结果并不在输出数组的中

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题