Javascript嵌套数组get元素
我有这样一个数组:Javascript嵌套数组get元素,javascript,jquery,recursion,Javascript,Jquery,Recursion,我有这样一个数组: "pages": [{ "key": "1", "pages": [{ "key": "2", "pages": [{ "key": "3" }] }, { "key": "4", "pages": [{ "key": "5" }] }] }]
"pages": [{
"key": "1",
"pages": [{
"key": "2",
"pages": [{
"key": "3"
}]
},
{
"key": "4",
"pages": [{
"key": "5"
}]
}]
}]
其中键1和4处于同一级别,1包含2,其中包含3,键4包含5。我想要的结果的顺序是[3,2,5,1,4]。我已经尝试了以下递归,但无法获得正确的顺序
function fnGetAll (oTopDetailPage, array) {
var i;
for (i=0; i<oTopDetailPage.length; i++) {
array.push(oTopDetailPage[i]);
if(oTopDetailPage[i].pages) {
fnGetAllSubPages(oTopDetailPage[i].pages, array);
}
}
return array;
}
函数fnGetAll(oTopDetailPage,数组){
var i;
对于(i=0;i如果需要a,可以先迭代子项,然后获取实际的键
结果是一个数组,与给定的数组稍有不同
函数getDepthFirst(对象){
var结果=[];
object.pages.forEach(函数iter(a){
isArray(a.pages)和&a.pages.forEach(iter);
结果。按下(a键);
});
返回结果;
}
var数据={pages:[{key:1,pages:[{key:2,pages:[{key:3}]},{key:4,pages:[{key:5}]}]};
console.log(getDepthFirst(data));//[3,2,5,4,1]
您的根容器有点奇怪,因为它是无效的javascript。我假设它是{pages:…}
,包含{}
属性的{pages:}
,但即使这样也没有意义,因为根容器不包含键
您应该首先修复节点,使其具有统一的结构,例如
type Node = Node { key: String, pages: [Node] }
那么实现深度优先搜索就很简单了
constdfs=({key,pages=[]})=>
[…pages.reduce((acc,p)=>acc.concat(dfs(p)),[]),键]
常数数据={
“密钥”:“1”,
“页数”:[{
“密钥”:“2”,
“页数”:[{
“键”:“3”
}]
},
{
“密钥”:“4”,
“页数”:[{
“键”:“5”
}]
}]
}
控制台日志(dfs(数据))
//['3','2','5','4','1']
你想要的输出没有意义。你能改变你期望的吗?可能是一个有父页面的对象,然后是子页面,比如{1:[2,3],4:[5]}
。为什么你需要输出你请求的内容?如果你添加了另一个页面,比如说,“key”是“6”,在“键”为“1”的对象的pages属性中,这会落在您的输出中的什么位置?为什么5
会出现在1
之前?对于那些想知道顺序从何而来的人来说:看起来boomcode正试图从最低到最高获取每个级别:级别1:[1,4],级别2:[2,5],级别3[3],级别3,级别2,级别1->3,2,5,1,4@PatrickBarr从上面的代码来看,1和4不在同一级别。4嵌套在1中。hm…:)越短越好。@NinaScholz谢谢:)是否可以像[3,5,2,4,1]一样进行后序遍历?@boomcode,是可能的。名称为反向级序遍历,请参见编辑。