Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript嵌套数组get元素_Javascript_Jquery_Recursion - Fatal编程技术网

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,是可能的。名称为反向级序遍历,请参见编辑。