真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

javascript生成一棵樹

問題描述

輸入一串父子節(jié)點對的數(shù)組,利用其構(gòu)造一顆樹

在義安等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站制作、網(wǎng)站建設(shè) 網(wǎng)站設(shè)計制作按需定制開發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站制作,全網(wǎng)整合營銷推廣,成都外貿(mào)網(wǎng)站建設(shè)公司,義安網(wǎng)站建設(shè)費用合理。

輸入

const arr = [
    {id:1,parentid:null},
    {id:2,parentid:1},
    {id:3,parentid:1},
    {id:4,parentid:2},
    {id:5,parentid:3}
]

解決思路

  1. 明確輸出的形式:

    type1: {id:0,chid:[{id,child},{id,child},{id,child}]}

    type2: 0:{1:{5:{}},2:{},3:{},4:{}}

    實踐中type1更為實用,故選擇之

  2. 每次只能處理一對父子關(guān)系,樹形結(jié)構(gòu)的核心是節(jié)點,也即處理兩個節(jié)點。

    由于每個節(jié)點的狀態(tài)是需要維護(hù)的,因此需要用一種結(jié)構(gòu)存儲每個節(jié)點并更新之,最后程序只需要找到根節(jié)點是誰即可輸出完整的屬性結(jié)構(gòu);

解決代碼

const arr = [
    {id:1,parentid:null},
    {id:2,parentid:1},
    {id:3,parentid:1},
    {id:4,parentid:2},
    {id:5,parentid:3}
]

function generateTree(srcList){
    // 1. 明確輸出的形式:
    // type1:{id:0,chid:[{id,child},{id,child},{id,child}]}
    // type2: 0:{1:{5:{}},2:{},3:{},4:{}}
    // 實踐中type1更為實用,故選擇之
    // 2. 每次只能處理一對父子關(guān)系,樹形結(jié)構(gòu)的核心是節(jié)點,也即處理兩個節(jié)點。
    // 由于每個節(jié)點的狀態(tài)是需要維護(hù)的,因此需要用一種結(jié)構(gòu)存儲每個節(jié)點并更新之,最后程序只需要找到根節(jié)點是誰即可輸出完整的屬性結(jié)構(gòu);
    let nodeRigister = {}
    let root = undefined
    srcList.forEach(element => {
        let childId = element.id
        let parentId = element.parentid
        // parentId可能引入新的信息:判斷是否為根節(jié)點。需要特判之
        if(!parentId){
            root = childId
        } 
        // 處理兒子節(jié)點
        if(!(childId in Object.keys(nodeRigister))){
            nodeRigister[childId] = {id:childId,child:[]}
        }
        // 處理父節(jié)點
        if(parentId && parentId in Object.keys(nodeRigister)){
            nodeRigister[parentId].child.push(nodeRigister[childId])
        }else if(parentId){
            nodeRigister[parentId] = {id:parentId,child:[nodeRigister[childId]]}
        }
    });
    return nodeRigister[root]
}

console.log(JSON.stringify(generateTree(arr)))
  

網(wǎng)站題目:javascript生成一棵樹
本文來源:http://weahome.cn/article/dsojpgj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部