js递归树状json,获得某个节点下全部子节点

本文介绍了如何在遇到具有层级关系的JSON数据时,通过递归方法获取特定节点及其所有子节点。内容包括问题描述、解决办法,并诚邀读者分享更好的解决方案或指出可能存在的错误。

问题描述:有一个json数组,数据有层级关系,现想获得某个节点下或一组节点的所有子级。

解决办法:递归获得子节点(如果你有更好的办法欢迎提供)

 var arr2 = [
            {
                "id": "1",
                "title": "1",
                "pid": "-1"
            },
            {
                "id": "2",
                "title": "2",
                "pid": "-1"
            },
            {
                "id": "3",
                "title": "3",
                "pid": "1"
            },
            {
                "id": "4",
                "title": "4",
                "pid": "2"
            },
            {
                "id": "5",
                "title": "5",
                "pid": "4"
            },
            {
                "id": "6",
                "title": "6",
                "pid": "5"
            }
        ]
        $(function () {
            console.log(arr2);
            var query = ["1", "2"];
            var newArr = [];
            debugger
            function finalQuery() {
                console.log("1")
                for (var r = 0; r < query.length; r++) {
                    debugger
                    function fun(id) {
                        debugger
                        for (var i = 0; i < arr2.length; i++) {
                            if (arr2[i].pid == id) {
                                newArr.push(arr2[i]);
                                fun(arr2[i].id);
                            } else {
                                continue;
                            }
                        }
                    }
                    fun(query[r]);
                }
            }
            finalQuery();
            //某些情况下可能会导致数据的重复,比如query数组中1和2本身就存在上下级关系
            //若想去重,可以用var newArr=Array.from(new Set(arr));来获得去重后的数组
            console.log(newArr);//获得了id为1和2的全部子节点
        })

如果你发现什么错误,欢迎提出来,对于递归真的是不太懂~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值