Javascript嵌套数组获取元素

boo*_*ode 2 javascript recursion jquery

我有一个像这样的数组:

"pages": [{
    "key": "1",
    "pages": [{
        "key": "2",
        "pages": [{
            "key": "3"
        }]
    },
        {
            "key": "4",
            "pages": [{
                "key": "5"
            }]

        }]
}]
Run Code Online (Sandbox Code Playgroud)

其中键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;
}
Run Code Online (Sandbox Code Playgroud)

Nin*_*olz 5

如果您想要深度优先搜索,您可以先迭代孩子,然后获取实际的密钥.

结果是一个数组,它有点不同,然后是给定的数组.

function getDepthFirst(object) {
    var result = [];
    object.pages.forEach(function iter(a) {
        Array.isArray(a.pages) && a.pages.forEach(iter);
        result.push(a.key);
    });
    return result;
}

var data = { pages: [{ key: 1, pages: [{ key: 2, pages: [{ key: 3 }] }, { key: 4, pages: [{ key: 5 }] }] }] };
  
console.log(getDepthFirst(data)); // [3, 2, 5, 4, 1]
Run Code Online (Sandbox Code Playgroud)

使用临时数组获取反向级别顺序遍历结果的附录[3, 5, 2, 4, 1],该数组从同一级别收集所有数据并返回包含所有级别项目的数组,从最高到最低.

回调在实际级别上使用闭包.

function getData(object) {
    var temp = [];
    object.pages.forEach(function iter(level) {
        return function (a) {
            Array.isArray(a.pages) && a.pages.forEach(iter(level + 1));
            temp[level] = temp[level] || [];
            temp[level].push(a.key);
        };
    }(0));
    return temp.reduceRight(function (r, a) {
        return r.concat(a);
    });
}

var data = { pages: [{ key: 1, pages: [{ key: 2, pages: [{ key: 3 }] }, { key: 4, pages: [{ key: 5 }] }] }] };

console.log(getData(data)); // [3, 5, 2, 4, 1]
Run Code Online (Sandbox Code Playgroud)