鍵關聯資料庫資料與前臺所需無限層級json的相互遞迴轉換
阿新 • • 發佈:2018-11-30
測試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>