使用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);