平級數據轉換為樹形結構

/**

?????*?該方法用于將有父子關系的數組轉換成樹形結構的數組

?????*?接收一個具有父子關系的數組作為參數

?????*?返回一個樹形結構的數組

????*/

????translateDataToTree(data){

??????//?沒有父節點的數據

??????let?parents?=?data.filter(value?=>?value.upperCompanyCode?==?0);

??????//?有父節點的數據

??????let?children?=?data.filter(value?=>?value.upperCompanyCode?!==?'undefined'?&&?value.upperCompanyCode?!=?null);

??????//?定義轉換方法的具體實現

??????let?translator?=?(parents,children)?=>?{


????????//?遍歷父節點數據

????????parents.forEach((parent)?=>?{

??????????//?遍歷子節點數據

??????????children.forEach((current,index)?=>?{

????????????//?此時找到父節點對應的一個子節點

????????????if(current.upperCompanyCode?===?parent.comCode){

??????????????//?對子節點數據進行深拷貝,這里只支持部分類型

??????????????let?temp?=?JSON.parse(JSON.stringify(children));

??????????????//?讓當前子節點從temp中移除,temp作為新的子節點數據,這里是為了遞歸時,子節點的遍歷次數更少,如果父子關系的層級越多,越有利

??????????????temp.splice(index,1);

??????????????//?讓當前子節點作為唯一的父節點,去遞歸查找其對應的子節點

??????????????translator([current],?temp);

??????????????typeof?parent.children?!==?'undefined'???parent.children.push(current)?:?parent.children?=?[current]

????????????}

??????????})

????????})



??????};

??????//?調用轉換方法

??????translator(parents,children);

??????//?返回結果

??????return?parents;

????},

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 對于樹這個數據結構,第一次看到這個樹肯定是一臉蒙逼,瑪德,樹?種樹的那個樹么?哈哈哈,當然不是,前面我們說過數組添...
    編程小世界閱讀 420評論 0 0
  • 1. AVL樹 AVL樹簡單來說是帶有平衡條件的二叉查找樹.傳統來說是其每個節點的左子樹和右子樹的高度最多差1(注...
    fredal閱讀 1,843評論 0 4
  • 紅黑樹是平衡二叉查找樹的一種。為了深入理解紅黑樹,我們需要從二叉查找樹開始講起。 BST 二叉查找樹(Binary...
    kanehe閱讀 1,392評論 0 8
  • 1.HashMap是一個數組+鏈表/紅黑樹的結構,數組的下標在HashMap中稱為Bucket值,每個數組項對應的...
    誰在烽煙彼岸閱讀 1,039評論 2 2
  • 醫院外心臟驟停時,單純胸外按壓心肺復蘇(CO-CPR)已成為標準CPR (S-CPR)的替代方法,即同時進行胸外按...
    DrDavidNC閱讀 858評論 0 1