平級數(shù)據(jù)轉(zhuǎn)換為樹形結(jié)構(gòu)

/**

?????*?該方法用于將有父子關(guān)系的數(shù)組轉(zhuǎn)換成樹形結(jié)構(gòu)的數(shù)組

?????*?接收一個(gè)具有父子關(guān)系的數(shù)組作為參數(shù)

?????*?返回一個(gè)樹形結(jié)構(gòu)的數(shù)組

????*/

????translateDataToTree(data){

??????//?沒有父節(jié)點(diǎn)的數(shù)據(jù)

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

??????//?有父節(jié)點(diǎn)的數(shù)據(jù)

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

??????//?定義轉(zhuǎn)換方法的具體實(shí)現(xiàn)

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


????????//?遍歷父節(jié)點(diǎn)數(shù)據(jù)

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

??????????//?遍歷子節(jié)點(diǎn)數(shù)據(jù)

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

????????????//?此時(shí)找到父節(jié)點(diǎn)對應(yīng)的一個(gè)子節(jié)點(diǎn)

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

??????????????//?對子節(jié)點(diǎn)數(shù)據(jù)進(jìn)行深拷貝,這里只支持部分類型

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

??????????????//?讓當(dāng)前子節(jié)點(diǎn)從temp中移除,temp作為新的子節(jié)點(diǎn)數(shù)據(jù),這里是為了遞歸時(shí),子節(jié)點(diǎn)的遍歷次數(shù)更少,如果父子關(guān)系的層級越多,越有利

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

??????????????//?讓當(dāng)前子節(jié)點(diǎn)作為唯一的父節(jié)點(diǎn),去遞歸查找其對應(yīng)的子節(jié)點(diǎn)

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

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

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

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

????????})



??????};

??????//?調(diào)用轉(zhuǎn)換方法

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

??????//?返回結(jié)果

??????return?parents;

????},

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 對于樹這個(gè)數(shù)據(jù)結(jié)構(gòu),第一次看到這個(gè)樹肯定是一臉蒙逼,瑪?shù)?,樹?種樹的那個(gè)樹么?哈哈哈,當(dāng)然不是,前面我們說過數(shù)組添...
    編程小世界閱讀 498評論 0 0
  • 1. AVL樹 AVL樹簡單來說是帶有平衡條件的二叉查找樹.傳統(tǒng)來說是其每個(gè)節(jié)點(diǎn)的左子樹和右子樹的高度最多差1(注...
    fredal閱讀 1,908評論 0 4
  • 紅黑樹是平衡二叉查找樹的一種。為了深入理解紅黑樹,我們需要從二叉查找樹開始講起。 BST 二叉查找樹(Binary...
    kanehe閱讀 1,465評論 0 8
  • 醫(yī)院外心臟驟停時(shí),單純胸外按壓心肺復(fù)蘇(CO-CPR)已成為標(biāo)準(zhǔn)CPR (S-CPR)的替代方法,即同時(shí)進(jìn)行胸外按...
    DrDavidNC閱讀 905評論 0 1
  • 我想說:切換成markdown模式的時(shí)候保存按鈕被擋住了。。導(dǎo)致半天也沒鬧明白為啥沒生效?。。?蒼天?。。∵@個(gè)代碼...
    消魂淚閱讀 2,909評論 2 0

友情鏈接更多精彩內(nèi)容