js递归树状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的全部子节点
        })

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

你可能感兴趣的:(树状,json,递归树状json)