1. 程式人生 > 實用技巧 >具有層級關係的扁平化陣列轉化成樹形結構陣列

具有層級關係的扁平化陣列轉化成樹形結構陣列

// 遞迴查詢父級及其子級節點
nestFn(id) {
  let a = [];
  this.resJson.forEach(item => {
    if (item.fatherid == id) {
      let { fatherid, roleid, rolelevel, rolename } = item;
      a.push({
        fatherid,
        roleid, 
        rolelevel, 
        rolename,
        children: this.nestFn(roleid)
      })
    }
  })
  return a;
},

deptFunc() {
  this.resJson = JSON.parse(treeJson);
  let deptArr = []; // 轉化後的結果資料
  this.resJson.forEach((item, index) => {
    if (Number(item.fatherid) < 0) { // 查詢最外層節點資料
      let { fatherid, roleid, rolelevel, rolename } = item;
      deptArr.push({
        fatherid,
        roleid,
        rolelevel,
        rolename,
        children: this.nestFn(roleid)
      })
    }
  });
},

下圖是98條具有層級關係的扁平化陣列

下圖是轉化後的結果資料

轉換思路:父級與子級的關係是通過fatherid與roleid關聯的,子元素的‘fatherid===父元素的roleid’,由此可以遞迴出層級關係的資料