一个关于递归算法的问题

发布于 2022-09-06 01:35:33 字数 1126 浏览 25 评论 0

我想找出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": []
                    }
                ]
            }]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

杯别 2022-09-13 01:35:33

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

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

data2.filter(loop)
太傻旳人生 2022-09-13 01:35:33

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文