//通過子級的pid找到父級對應的id,制作樹狀圖
var data = [ { id: 1, name: "辦公管理", pid: 0 }, { id: 2, name: "請假申請", pid: 1 }, { id: 3, name: "出差申請", pid: 1 }, { id: 4, name: "請假記錄", pid: 2 }, { id: 5, name: "系統設置", pid: 0 }, { id: 6, name: "權限管理", pid: 5 }, { id: 7, name: "用戶角色", pid: 6 }, { id: 8, name: "菜單設置", pid: 6 }, ]; function toTree(data) { // 刪除 所有 children,以防止多次調用 data.forEach(function (item) { delete item.children; }); // 將數據存儲為 以 id 為 KEY 的 map 索引數據列 var map = {}; data.forEach(function (item) { map[item.id] = item; }); //console.log(map); var val = []; data.forEach(function (item) { // 以當前遍歷項,的pid,去map對象中找到索引的id item.label = item.name; var parent = map[item.pid]; // 好繞啊,如果找到索引,那么說明此項不在頂級當中,那么需要把此項添加到,他對應的父級中 if (parent) { (parent.children || ( parent.children = [] )).push(item); } else { //如果沒有在map中找到對應的索引ID,那么直接把 當前的item添加到 val結果集中,作為頂級 val.push(item); } }); return val; } console.log(toTree(data))
//假如后台返回的數據是樹狀圖的結構,獲取每層當中的每一個固定的字段,比如獲取每一層數據中的id字段 getIds(me.d_center); //me.d_center是后台返回的樹狀圖結構形式的數據 function getIds(data){ for(let i in data){ me.idArr.push(data[i].id); if(data[i].children){ getIds(data[i].children) } } }