1. 程式人生 > >鍵關聯資料庫資料與前臺所需無限層級json的相互遞迴轉換

鍵關聯資料庫資料與前臺所需無限層級json的相互遞迴轉換

測試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>