亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從javascript中的平面數組構建樹數組

從javascript中的平面數組構建樹數組

Smart貓小萌 2019-07-06 15:09:32
從javascript中的平面數組構建樹數組我有一個復雜的json文件,為了以后構建一棵樹,我必須用javascript來處理它,使其具有層次結構。json的每個條目都有:id:一個唯一的id,parentId:父節點的id(如果節點是樹的根,則為0)級別:樹中的深度級別。JSON數據已經被“排序”了。我的意思是,一個條目的上面將有一個父節點或兄弟節點,而在它自身下面將有一個子節點或兄弟節點。投入:{     "People": [         {             "id": "12",             "parentId": "0",             "text": "Man",             "level": "1",             "children": null         },         {             "id": "6",             "parentId": "12",             "text": "Boy",             "level": "2",             "children": null         },                 {             "id": "7",             "parentId": "12",             "text": "Other",             "level": "2",             "children": null         },         {             "id": "9",             "parentId": "0",             "text": "Woman",             "level": "1",             "children": null         },         {             "id": "11",             "parentId": "9",             "text": "Girl",             "level": "2",             "children": null         }     ],     "Animals": [         {             "id": "5",             "parentId": "0",             "text": "Dog",             "level": "1",             "children": null         },         {             "id": "8",             "parentId": "5",             "text": "Puppy",             "level": "2",             "children": null         },         {             "id": "10",             "parentId": "13",             "text": "Cat",             "level": "1",             "children": null         },         {             "id": "14",             "parentId": "13",             "text": "Kitten",             "level": "2",             "children": null         },     ]
查看完整描述

3 回答

?
茅侃侃

TA貢獻1842條經驗 獲得超22個贊

如果使用地圖查找,有一個有效的解決方案。如果父母總是先于他們的孩子,你可以合并這兩個for-循環。它支持多根。它在懸空分支上給出了一個錯誤,但可以修改為忽略它們。它不需要第三方圖書館。據我所知,這是最快的解決辦法。

function list_to_tree(list) {
    var map = {}, node, roots = [], i;
    for (i = 0; i < list.length; i += 1) {
        map[list[i].id] = i; // initialize the map
        list[i].children = []; // initialize the children
    }
    for (i = 0; i < list.length; i += 1) {
        node = list[i];
        if (node.parentId !== "0") {
            // if you have dangling branches check that map[node.parentId] exists
            list[map[node.parentId]].children.push(node);
        } else {
            roots.push(node);
        }
    }
    return roots;}var entries = [
    {
        "id": "12",
        "parentId": "0",
        "text": "Man",
        "level": "1"
    }, { /*...*/ }];console.log(list_to_tree(entries));

如果您對復雜性理論感興趣,這個解決方案是Θ(n log(N)。遞歸過濾解決方案是Θ(n^2),這可能是一個大數據集的問題.


查看完整回答
反對 回復 2019-07-06
  • 3 回答
  • 0 關注
  • 652 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號