簡體   English   中英

轉換為層次結構

[英]Convert to hierarchical structure

var sample = [{
        "_id": "1",
        "category": "type1",
        "path": "data1//data2//data3//data4",
        "org": "001"
    },
    {
        "_id": "2",
        "category": "type2",
        "path": "data1//data2//data3//data4",
        "org": "002"
    }
];

以上樣本數據需要轉換為層次結構。

var sample = {
    children: [{
            name: "type1",
            children: [{
                name: "data1",
                children: [{
                    name: "data2",
                    children: [{
                        name: "data3",
                        children: [{
                            name: "data4"
                        }]
                    }]
                }]
            }]
        },
        {
            name: "type2",
            children: [{
                name: "data1",
                children: [{
                    name: "data2",
                    children: [{
                        name: "data3"
                    }]
                }]
            }]
        }

    ]
};

預期產量:

+type1
  data1
    data2
      data3
        data4

您可以使用哈希表和層次結構來分配嵌套結構的子級別,並可以通過類別或路徑值進行訪問。

基本上,此提議檢查密鑰,如果不在對象中,則創建一個具有單個屬性和子級數組的新對象,並將一個新對象推入父下划線數組,並使用相同的引用前創建的數組的數組。

然后返回實際水平。 最后,將使用lanst值創建objetc並將其推送到數組。

 var sample = [{ _id: "1", category: "type1", path: "data1//data2//data3//data4", org: "001" }, { _id: "2", category: "type2", path: "data1//data2//data3//data4", org: "002" }], result = { children: [] }; sample.forEach(function (a, i) { var keys = [a.category].concat(a.path.split('//')), last = keys.pop(); keys.reduce(function (r, k) { if (!r[k]) { r[k] = { _: [] }; r._.push({ name: k, children: r[k]._ }); } return r[k]; }, this)._.push({ name: last }); }, { _: result.children }); console.log(result); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM