簡體   English   中英

如何將數據結構轉換為另一種樹結構

[英]How to convert data structure to another tree structure

我需要您的幫助來創建具有給定 JSON 的樹狀數據結構,如下所示,並且所需的 output 結構已經在下面給出。 我是編程初學者,對數據結構知之甚少

JSON 來自 API

   [
    "",
    [
        "Test",
        [
            "Test/sample",
            [
                "Test/sample/sample1"
            ]
        ],
        [
            "Test/test3"
        ]
    ],
    [
        "Test1",
        [
            "Test1/test2"
        ]
    ],
    [
        "cat"
    ]
]

Output 如下結構

 {
        "key": "Image",
        "label": "Image",
        "icon": 'pi pi-folder',
        "children": []
    },

    {
        "key": "Test",
        "label": "Test",
        "icon": "pi pi-folder",

        "children": [
            {
                "key": "Test/sample",
                "label": "Sample",
                "icon": "pi pi-folder",

                "children": [{
                    "key": "Test/sample/sample1",
                    "label": "Sample1",
                    "icon": 'pi pi-folder',
                    "children": []
                }]
            },
            {
                "key": "Test/test3",
                "label": "test3",
                "icon": "pi pi-folder",
                "children": []
            },
        ]
    },

    {
        "key": "Test1",
        "label": "Test1",
        "icon": "pi pi-folder",
        "children": [{
            "key": "Test1/test2",
            "label": "test2",
            "icon": "pi pi-folder",
            "children": []
        }]
    },

    {
        "key": "cat",
        "label": "cat",
        "icon": "pi pi-folder",
        "children": []
    },

]

以上結構為圖片文件目錄,目錄名用label表示,圖標表示目錄,子目錄表示子目錄

API 的控制台值

圖。1

它可以使用遞歸 function 輕松歸檔

 const icon = "pi pi-folder"; var a = [ "", [ "Test", [ "Test/sample", [ "Test/sample/sample1" ] ], [ "Test/test3" ] ], [ "Test1", [ "Test1/test2" ] ], [ "cat" ] ] /** * @param {Array} arr The child array */ function createChildNode(arr) { let key = "Image"; let label = "Image"; let children = []; if (arr.length >= 1) { key = arr[0]; label = key.includes("/")? key.split("/").pop(): key; label = label.charAt(0).toUpperCase() + label.slice(1); for (let index = 1; index < arr.length; index++) { const element = arr[index]; children.push(createChildNode(element)); } } return {key: key, label: label, icon: icon, children: children}; } var b = [] for (let index = 0; index < a.length; index++) { const element = a[index]; b.push(createChildNode(element)); } console.log(b);

暫無
暫無

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

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