键关联数据库数据与前台所需无限层级json的相互递归转换

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_21423689/article/details/84348463

测试json:

将层级json转为数据库存储的平级键关联数据

/**
     * 将层级json转为数据库存储的平级键关联数据
     * @param {[type]} json [description]
     */
    function JsonToSqlArr(json) {
        let arr = [];
        function getjson(curdata) {
            if (!curdata.length) {
                return arr;
            }
            for (let i = 0; i < curdata.length; i++) {
                arr.push(curdata[i]);
                if (curdata[i].childs.length) {
                    getjson(curdata[i].childs);
                }
            }
        }
        getjson(json);
        return arr;
    }

    //换块内存存储
    let arr=JSON.parse(JSON.stringify(JsonToSqlArr(json)));
    //为了模拟删除childs
        for (let i in arr) {
            delete arr[i].childs;
        }
    console.log(arr,'由json分层的数据');

将数据库键关联数据转成前台需要的层级json

/**
    * 将数据库键关联数据转成前台需要的层级json
    * @param  {[type]} arr [description]
    * @return {[type]}     [description]
    */
    function getarrTojson(arr) {
        let ding = [];
        for (let i = 0; i < arr.length; i++) {
            arr[i].childs = [];
            if (arr[i].fid == 0) {
                ding.push(arr[i]);
                arr.splice(i, 1);
            }
        }
        for (let i = 0; i < ding.length; i++) {
            getJson(arr, ding[i]);
        }

        function getJson(arr, ding) {
            for (let i in arr) {
                if (arr[i].fid == ding.id) { //如果在这层找到
                    if (ding.childs == undefined) {
                        ding.childs = [];
                    }
                    ding.childs.push(arr[i]);
                    //为每一个匹配自己的子节点
                    getJson(arr, ding.childs[ding.childs.length - 1]);
                } else {
                    continue;
                }
            }
        };
        return ding;
    }

完整代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>

<body>
    <div class="aa"></div>
    <script>
    let json = [{
            "id": 600,
            "dname": "集团中国总部",
            "fid": 0,
            "childs": [{
                    "id": 601,
                    "dname": "广东省公司",
                    "fid": 600,
                    "childs": [{
                        "id": 602,
                        "dname": "深圳分公司",
                        "fid": 601,
                        "childs": [{
                            "id": 603,
                            "dname": "福田办事处",
                            "fid": 602,
                            "childs": [{
                                "id": 613,
                                "dname": "车公庙办事点",
                                "fid": 603,
                                "childs": [{
                                    "id": 618,
                                    "dname": "测试点",
                                    "fid": 613,
                                    "childs": []
                                }]
                            }]
                        }]
                    }]
                },
                {
                    "id": 606,
                    "dname": "湖南省公司",
                    "fid": 600,
                    "childs": [{
                        "id": 607,
                        "dname": "长沙分公司",
                        "fid": 606,
                        "childs": []
                    }]
                },
                {
                    "id": 612,
                    "dname": "上海市公司",
                    "fid": 600,
                    "childs": []
                }
            ]
        },
        {
            "id": 604,
            "dname": "集团美国总部",
            "fid": 0,
            "childs": [{
                "id": 605,
                "dname": "纽约分公司",
                "fid": 604,
                "childs": [{
                    "id": 611,
                    "dname": "曼哈顿办事处",
                    "fid": 605,
                    "childs": []
                }]
            }]
        }
    ];

    /**
     * 将层级json转为数据库存储的平级键关联数据
     * @param {[type]} json [description]
     */
    function JsonToSqlArr(json) {
        let arr = [];

        function getjson(curdata) {
            if (!curdata.length) {
                return arr;
            }
            for (let i = 0; i < curdata.length; i++) {
                arr.push(curdata[i]);
                if (curdata[i].childs.length) {
                    getjson(curdata[i].childs);
                }
            }
        }
        getjson(json);
        return arr;
    }

    //换块内存存储
    let arr = JSON.parse(JSON.stringify(JsonToSqlArr(json)));
    //为了模拟删除childs
    for (let i in arr) {
        delete arr[i].childs;
    }
    console.log(arr, '由json分层的数据');


    /**
     * 将数据库键关联数据转成前台需要的层级json
     * @param  {[type]} arr [description]
     * @return {[type]}     [description]
     */
    function getarrTojson(arr) {
        let ding = [];
        for (let i = 0; i < arr.length; i++) {
            arr[i].childs = [];
            if (arr[i].fid == 0) {
                ding.push(arr[i]);
                arr.splice(i, 1);
            }
        }
        for (let i = 0; i < ding.length; i++) {
            getJson(arr, ding[i]);
        }

        function getJson(arr, ding) {
            for (let i in arr) {
                if (arr[i].fid == ding.id) { //如果在这层找到
                    if (ding.childs == undefined) {
                        ding.childs = [];
                    }
                    ding.childs.push(arr[i]);
                    //为每一个匹配自己的子节点
                    getJson(arr, ding.childs[ding.childs.length - 1]);
                } else {
                    continue;
                }
            }
        };
        return ding;
    }
    //打印是否生成成功
    console.log(getarrTojson(arr), '++++++');
    </script>
    }
</body>

</html>

猜你喜欢

转载自blog.csdn.net/qq_21423689/article/details/84348463