ato*_*m0s 5 javascript arrays recursion node.js lodash
我有一个对象数组,可以包含相同对象类型的子对象,如下所示:
var exampleArray = [
{
alias: 'alias1',
children: [
{
alias: 'child1'
},
{
alias: 'child2',
children: [
{
alias: 'child4'
},
{
alias: 'child5'
}
]
},
{
alias: 'child3'
}
]
},
{
alias: 'alias2'
},
{
alias: 'alias3',
children: [
{
alias: 'child6'
},
{
alias: 'child7'
}
]
}
];
Run Code Online (Sandbox Code Playgroud)
基础对象具有其他属性,但它们对手头的问题并不重要.现在,让我们假设对象可以是:
{
alias: 'string',
children: []
}
Run Code Online (Sandbox Code Playgroud)
孩子是可选的.
我正在寻找最好的方法/最快的方法来管理这样的对象的一些东西.我已经创建了一些递归方法来完成我想要的一些事情,但我想知道是否有更好的方法来执行以下任务:
目前,我递归地执行此操作,但鉴于此数组可以有限增长,递归方法最终将达到堆栈限制.
getParent(arr,alias) - 我需要能够获得包含具有给定别名的元素的父级.鉴于别名'对整个数组来说是唯一的,因此永远不会有两个相同的别名.我现在再次递归地做这个,但我想找到更好的方法来做到这一点.
deleteObject(arr,alias) - 我不确定目前如何完成这个.我需要能够传递一个数组和一个别名,并从给定的数组中删除该对象(及其所有子对象).我开始了这样做的递归方法,但停了下来,决定在这里发帖.
我正在使用Node.js并且可以使用lodash来实现更快的处理方法.我仍然是相当新的JavaScript,所以我不确定是否有更好的方法来处理像这样的大规模数组.
bob*_*bob -1
我可能会稍微不同地处理您的主数组,并将其保留为引用其他项目而不是完全合并它们的平面数组。
var flat = [
{
alias : "str1",
children : [ flat[1], flat[2] ],
parent : null
},
{
alias : "str1",
children : [],
parent : flat[0]
},
{
alias : "str1",
children : [],
parent : flat[0]
}
]
Run Code Online (Sandbox Code Playgroud)
这是一种“链表”方法。链接列表有优点和缺点,但您将能够快速迭代所有项目。