摘要:多叉樹的分析及實(shí)現(xiàn)好了,終于回到了第一篇文章提到的組織結(jié)構(gòu)的多叉樹實(shí)現(xiàn),有了前兩篇文章的基礎(chǔ),多叉樹的實(shí)現(xiàn)也就變得簡(jiǎn)單了從后臺(tái)拿到的原始數(shù)據(jù)形式為總部工程部工程部工程部工程部測(cè)試部測(cè)試部測(cè)試部生產(chǎn)部規(guī)劃部市場(chǎng)部這是一個(gè)典型的多叉樹結(jié)構(gòu),總部
js多叉樹的分析及實(shí)現(xiàn)
好了,終于回到了第一篇文章提到的組織結(jié)構(gòu)的多叉樹實(shí)現(xiàn),有了前兩篇文章的基礎(chǔ),多叉樹的實(shí)現(xiàn)也就變得簡(jiǎn)單了
從后臺(tái)拿到的原始數(shù)據(jù)形式為
const data = [ {"orgId":1,"orgName":"總部","parentId":0}, {"orgId":6,"orgName":"工程部","parentId":1}, {"orgId":7,"orgName":"工程部1","parentId":6}, {"orgId":8,"orgName":"工程部2","parentId":7}, {"orgId":9,"orgName":"工程部3","parentId":8}, {"orgId":10,"orgName":"測(cè)試部","parentId":1}, {"orgId":11,"orgName":"測(cè)試部1","parentId":10}, {"orgId":12,"orgName":"測(cè)試部2","parentId":11}, {"orgId":13,"orgName":"生產(chǎn)部","parentId":1}, {"orgId":14,"orgName":"規(guī)劃部","parentId":1}, {"orgId":15,"orgName":"市場(chǎng)部","parentId":1}, ];
這是一個(gè)典型的多叉樹結(jié)構(gòu),總部直接下級(jí)單位有工程部,測(cè)試部,生產(chǎn)部,規(guī)劃部,市場(chǎng)部;其中工程部和測(cè)試部又有下級(jí)部門...
要求轉(zhuǎn)換成的數(shù)據(jù)格式是
const json={ 總部 : { 工程部 : { 工程部1 : { 工程部1 : { }, }, }, 測(cè)試部 : { 測(cè)試部1 : { }, 測(cè)試部2 : { } }, 銷售部 : { 銷售部1 : { }, 銷售部2 : { } }, 售后部 : { } } };
需要的數(shù)據(jù)形式為json嵌套對(duì)象,而且每個(gè)對(duì)象只保留屬性名,所以分兩步進(jìn)行操作
1.利用原始數(shù)據(jù)生成組織機(jī)構(gòu)列表樹,利用遞歸判斷id并生成多叉樹
2.在第一步生成多叉樹的過(guò)程中同時(shí)生成所需對(duì)象,使之符合需要的數(shù)據(jù)形式
代碼如下
function MT(){ var OBJ={}; var CURRENT; var TEM; this.root=null; this.Node=function(e){ this.orgId=e.orgId; this.orgName=e.orgName; this.parentId=e.parentId; this.children=[]; } this.insert=function(e){ CURRENT=OBJ; function recursiveAdd(tem,e){ if(tem.orgId==e.parentId){ tem.children.push(e); CURRENT=CURRENT[tem.orgName]; CURRENT[e.orgName]={}; }else{ for(var i=0;i需要注意的幾點(diǎn):
生成樹結(jié)構(gòu)首先找出根節(jié)點(diǎn),并遞歸添加其他子節(jié)點(diǎn)
代碼中的CURRENT=CURRENT[tem.orgName],CURRENT[e.orgName]={};用來(lái)生成嵌套對(duì)象,這里涉及數(shù)據(jù)類型的指向,請(qǐng)看以下示例代碼
var Ele = {}; function nested(element){ element["key"] = {}; element = element["key"]; element["key1"] = {}; element = element["key1"]; } nested(Ele); console.log(Ele);以上,給有需要的朋友,也為自己做一個(gè)記錄^ ^
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/81404.html
摘要:前言本文研究的是如何對(duì)一個(gè)多叉樹進(jìn)行全路徑的遍歷,并輸出全路徑結(jié)果。問(wèn)題構(gòu)建現(xiàn)在存在一個(gè)多叉樹,其結(jié)點(diǎn)情況如下圖,需要給出方法將葉子節(jié)點(diǎn)的所有路徑進(jìn)行輸出。 多叉樹全路徑遍歷 本文為原創(chuàng)作品,首發(fā)于微信公眾號(hào):【坂本先生】,如需轉(zhuǎn)載請(qǐng)?jiān)谖氖酌黠@位置標(biāo)明轉(zhuǎn)載于微信公眾號(hào):【坂本先生】,否則追究其法律責(zé)任。 前言 本文研究的是如何對(duì)一個(gè)多叉樹進(jìn)行全路徑的遍歷,并輸出全路徑結(jié)果。該問(wèn)題的研究...
摘要:二叉樹的層級(jí)遍歷創(chuàng)建一個(gè)二叉樹輸出函數(shù)先訪問(wèn)左子樹,再訪問(wèn)自身,再訪問(wèn)右子樹先訪問(wèn)自身,再訪問(wèn)左子樹,再訪問(wèn)右子樹先訪問(wèn)左子樹,再訪問(wèn)右子樹再訪問(wèn)自身層級(jí)遍歷多叉樹的層級(jí)遍歷創(chuàng)建一個(gè)多叉樹輸出函數(shù)遞歸遍歷每個(gè)節(jié)點(diǎn)方法方法方法層級(jí)遍歷每 1、二叉樹的層級(jí)遍歷 創(chuàng)建一個(gè)二叉樹 class Binary{ constructor(data,left,right){ this.data...
摘要:經(jīng)過(guò)分析和思考,我決定不采用遞歸的方式來(lái)編寫樹形數(shù)據(jù)的處理,最終選用來(lái)維護(hù)樹節(jié)點(diǎn)之間的關(guān)系。以權(quán)限樹為例,做一個(gè)樹形數(shù)據(jù)工具類的設(shè)計(jì)。 1.簡(jiǎn)介 ? 在一些管理系統(tǒng)中一般都會(huì)用到,會(huì)用到一些樹形數(shù)據(jù),例如部門組織以及權(quán)限等數(shù)據(jù),都得生成樹形數(shù)據(jù),需要寫一些樹形數(shù)據(jù)生成工具,一般使用遞歸的方式,性能低下還可能會(huì)導(dǎo)致爆棧。經(jīng)過(guò)分析和思考,我決定不采用遞歸的方式來(lái)編寫樹形數(shù)據(jù)的處理,最...
摘要:切記,紅黑樹在旋轉(zhuǎn)和顏色變換的過(guò)程中,必須遵守紅黑樹的幾條規(guī)則。樹的外部存儲(chǔ)磁盤布局計(jì)算機(jī)中的機(jī)械磁盤是由磁頭和圓盤組成,每個(gè)圓盤上劃分為多個(gè)磁道,每個(gè)磁道又劃分為多個(gè)扇區(qū)。 術(shù)語(yǔ) showImg(https://segmentfault.com/img/bVbai3r?w=643&h=407); 根 ????樹最頂端的節(jié)點(diǎn)稱為根,一棵樹只有一個(gè)根 父節(jié)點(diǎn) ????每個(gè)節(jié)...
閱讀 964·2019-08-30 15:55
閱讀 557·2019-08-26 13:56
閱讀 2090·2019-08-26 12:23
閱讀 3310·2019-08-26 10:29
閱讀 610·2019-08-26 10:17
閱讀 2878·2019-08-23 16:53
閱讀 708·2019-08-23 15:55
閱讀 2832·2019-08-23 14:25