簡體   English   中英

typescript:遍歷嵌套對象數組直到滿足條件

[英]typescript: traverse nested array of objects until condition is met

我有如下嵌套數組。

  const tree = {
        "id": 1,
        "name": "mainOrgName",
        "children": [
            {
                "id": 10,
                "name": "East Region",
                "children": [
                    {
                        "id": 11,
                        "name": "test east sub 1",
                        "children": [
                            {
                                "id": 12,
                                "name": "sub 22 sub 1",
                                "children": [
                                    {
                                        "id": 15,
                                        "name": "sub 333 of sub ",
                                        "children": [
                                            {
                                                "id": 16,
                                                "name": "sub 4444",
                                                "children": []
                                            }
                                        ]
                                    }
                                ]
                            }
                        ]
                    }
                ]
            },
            {
                "id": 13,
                "name": "west region",
                "children": [
                    {
                        "id": 14,
                        "name": "test west sub 1",
                        "children": []
                    }
                ]
            }
        ]
    }

我需要遍歷tree.children數組以獲取子 arrays 及其子項的all id and name ,直到我們沒有找到空的子項數組。 注意: children 數組可能為空或可能有更多級別)

我需要如下結果 預期結果

[
    {
        "name": "East Region",
        "value": 10,
        "selected": false
    },
 {
        "name": "test east sub 1",
        "value": 11,
        "selected": false
    },
 {
        "name": "sub 22 sub 1",
        "value": 12,
        "selected": false
    },
 {
        "name": "sub 333 of sub",
        "value": 15,
        "selected": false
    },
 {
        "name": "sub 4444",
        "value": 16,
        "selected": false
    },
    {
        "name": "west region",
        "value": 13,
        "selected": false
    },
 {
        "name": "test west sub 1",
        "value": 14,
        "selected": false
    },
]

我試過以下

const candidates = tree.children.map(org => ({name: org.name, value: org.id, selected: false}));

但它給了我以下

[
    {
        "name": "East Region",
        "value": 10,
        "selected": false
    },
    {
        "name": "west region",
        "value": 13,
        "selected": false
    }
]

我正在嘗試獲取它,但不確定如何放置遍歷條件直到子項為空,並以所需格式將所需字段推送到最終數組中。 可能需要遞歸/回調函數,但不確定如何使用它。

請幫助獲得預期結果。 謝謝

嘗試這個,

 const tree = { "id": 1, "name": "mainOrgName", "children": [ { "id": 10, "name": "East Region", "children": [{ "id": 11, "name": "test east sub 1", "children": [{ "id": 12, "name": "sub 22 sub 1", "children": [{ "id": 15, "name": "sub 333 of sub ", "children": [{ "id": 16, "name": "sub 4444", "children": [] }] }] }] }] }, { "id": 13, "name": "west region", "children": [{ "id": 14, "name": "test west sub 1", "children": [] }] } ] } let items = [] let result = lootIt(tree.children) console.log(result) function lootIt (arr) { for(let i = 0; i< arr.length; i++){ let obj = {} obj['name'] = arr[i]['name'] obj['value'] = arr[i]['id'] obj['selected'] = false items.push(obj) if(arr[i].children.== 0){ lootIt(arr[i].children) } } return items }

您可以使用recursion來做到這一點

 const tree = { "id": 1, "name": "mainOrgName", "children": [ { "id": 10, "name": "East Region", "children": [ { "id": 11, "name": "test east sub 1", "children": [ { "id": 12, "name": "sub 22 sub 1", "children": [ { "id": 15, "name": "sub 333 of sub ", "children": [ { "id": 16, "name": "sub 4444", "children": [] } ] } ] } ] } ] }, { "id": 13, "name": "west region", "children": [ { "id": 14, "name": "test west sub 1", "children": [] } ] } ] } function mapTree(children){ let result =[] for(c of children){ result.push({name: c.name, value: c.id, selected: false}) result = result.concat(mapTree(c.children)) } return result } console.log(mapTree(tree.children))

暫無
暫無

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

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