使用javascript/lodash迭代嵌套对象数组

使用javascript/lodash迭代嵌套对象数组,javascript,algorithm,lodash,Javascript,Algorithm,Lodash,我有一个表示嵌套导航列表的对象数组 [ { name: 'one', link: 'blah/blah', pages: [ { name: 'one A' link: 'blah/blah', pages: [] }, { name: 'one B'

我有一个表示嵌套导航列表的对象数组

[
    {
        name: 'one',
        link: 'blah/blah',
        pages: [
            {
               name: 'one A'
               link: 'blah/blah',
               pages: []
            },
            {
               name: 'one B'
               link: 'blah/blah',
               pages: []
            },
            {
               name: 'one C'
               link: null,
               pages: [
                   {
                       name: 'one C I'
                       link: 'blah/blah',
                       pages: []
                   }
               ]
            }
        ]
    } 
]
第一级对象可以具有链接和页面。嵌套对象将具有链接或页面。我不能假设嵌套的深度有限制。我需要一个对象为每个国家,包括其名称,其链接,如果它存在和它的所有父母。我目前的解决方案没有考虑超过3层的嵌套,为每一层添加支持是很费力的

我还需要能够搜索生成的对象数组,以便在以后获得它们的链接,如果这对解决方案有影响的话


我需要一个javascript解决方案,但也可以(并且愿意)使用lodash库中包含的函数

这是你需要的,还是你需要更具体的东西?
根据你最后的评论,如果你还需要什么,我有点困惑

我认为最好是编写一个递归函数,将每个嵌套列表作为参数。如果嵌套列表不是空的,请再次调用该函数。谢谢,我想,我真的不知道如何在迭代时跟踪所有父对象,但我不知道您的意思。如果您只是在顶层循环,然后在子层上调用相同的函数,您将遍历列表中的每个“pages”属性。是的,但结果对象需要包含其所有父对象的列表,例如为“one C I”创建的对象,需要一个包含“一个C”和“一”的属性,因为它们是其父属性
var arrPages = [{
        name: 'one',
        link: 'blah/blah',
        pages: [{
               name: 'one A', 
               link: 'blah/blah',
               pages: []
            },
            {
               name: 'one B', 
               link: 'blah/blah',
               pages: []
            },
            {
               name: 'one C', 
               link: null,
               pages: [{
                       name: 'one C I', 
                       link: 'blah blah',
                       pages: []
                   }]
            }]
    }]; 

function recursiveFunction(collection){ 
    _.each(collection, function(model){ 
        console.log(model); 
        if(model.pages.length > 0){ 
            recursiveFunction(model.pages); 
        }
    }); 
}; 

recursiveFunction(arrPages);