按顺序排列动态嵌套对象

问题描述 投票:0回答:0

我有一个动态嵌套数组,而且每次嵌套的层级都是动态的,我需要查询id并按顺序放入一个数组中。所以这取决于前面的功能,嵌套数据有时是两层,有时是三层,最多可以达到 10 层。 这里有两个例子。 例子一

let data = [
    {
        "field": "age",
        "items": [
            {
                "field": "name",
                "items": [
                    {
                        "field":"gender",
                        "items": [
                            {
                                "id": 12
                            }
                        ]
                    }, 
                    {
                        "field":"gender",
                        "items": [
                            {
                                "id": 10
                            },
                            {
                                "id": 32
                            }
                        ]
                    }
                ]
            }, 
            {
                "field": "name",
                "items": [
                    {
                        "field":"gender",
                        "items": [
                            {
                                "id": 29
                            }
                        ]
                    }
                ]
            }
        ]
    },
    {
        "field": "age",
        "items": [
            {
                "field": "name",
                "items": [
                    {
                        "field":"gender",
                        "items": [
                            {
                                "id": 31
                            }
                        ]
                    }, 
                    {
                        "field":"gender",
                        "items": [
                            {
                                "id": 15
                            },
                            {
                                "id": 39
                            }
                        ]
                    }
                ]
            }, 
            {
                "field": "name",
                "items": [
                    {
                        "field":"gender",
                        "items": [
                            {
                                "id": 55
                            }
                        ]
                    }
                ]
            }
        ]
    },
    {
        "field": "age",
        "items": [
            {
                "field": "name",
                "items": [
                    {
                        "field":"gender",
                        "items": [
                            {
                                "id": 43
                            }
                        ]
                    }, 
                ]
            }, 
            {
                "field": "name",
                "items": [
                    {
                        "field":"gender",
                        "items": [
                            {
                                "id": 41
                            }
                        ]
                    },
                    {
                        "field":"gender",
                        "items": [
                            {
                                "id": 6
                            },
                            {
                                "id": 98
                            }
                        ]
                    }
                ]
            }
        ]
    }
]
result: [12,10,32,29,31,15,39,55,43,41,6,98]

例子二

[
    {
        "field": "age",
        "items": [
            {
                "field": "name",
                items: [
                    {
                        "field":"gender",
                        "items": [
                            {
                                "field": "height":
                                "items": [
                                    {
                                        "id": 12
                                    }
                                ]
                            }
                        ]
                    }, 
                    {
                        "field":"gender",
                        "items": [
                            {
                                "field": "height":
                                "items": [
                                    {
                                        "id": 14
                                    }
                                ]
                            },
                            {
                                "field": "height":
                                "items": [
                                    {
                                        "id": 19
                                    }
                                ]
                            }
                        ]
                    }
                ]
            }, 
            {
                "field": "name",
                items: [
                    {
                        "field":"gender",
                        "items": [
                            {
                                "field": "height":
                                "items": [
                                    {
                                        "id": 22
                                    }
                                ]
                            }
                        ]
                    }
                ]
            }
        ]
    },
    {
        "field": "age",
        "items": [
            {
                "field": "name",
                items: [
                    {
                        "field":"gender",
                        "items": [
                            {
                                "field": "height":
                                "items": [
                                    {
                                        "id": 24
                                    }
                                ]
                            }
                        ]
                    }, 
                    {
                        "field":"gender",
                        "items": [
                            {
                                "field": "height":
                                "items": [
                                    {
                                        "id": 25
                                    }
                                ]
                            },
                            {
                                "field": "height":
                                "items": [
                                    {
                                        "id": 27
                                    },
                                    {
                                        "id": 29
                                    },
                                    {
                                        "id": 21
                                    }
                                ]
                            },
                            {
                                "field": "height":
                                "items": [
                                    {
                                        "id": 88
                                    }
                                ]
                            }
                        ]
                    }
                ]
            },
        ]
    }
]
result : [12,14,19,22,24,25,27,29,21,88]

如何只编写一个函数来展平整个数组,而不管数据如何随着嵌套的不同级别而变化。

javascript arrays typescript sorting nested
© www.soinside.com 2019 - 2024. All rights reserved.