循环遍历具有所有唯一ID的多维数组

Chr*_*ier 3 javascript multidimensional-array

我有一个多维数组,但ID在父母和子项中是唯一的,所以我在使用for循环时遇到问题.问题是我似乎无法抓住孩子的身份证.你觉得我应该怎么做?

    var Options = [
            {
                id: 0,
                children: []
            },
            {
                id: 2,
                children: []
            },
            {
                id: 3,
                children: [
                    {
                        id: 4,
                        children: []
                    },
                    {
                        id: 5,
                        children: []
                    },
                    {
                        id: 6,
                        children: []
                    }
                ]
            },
            {
                id: 7,
                children: [
                    {
                        id: 8,
                        children: []
                    },
                    {
                        id: 9,
                        children: []
                    }
                    ]
            }
        ];
Run Code Online (Sandbox Code Playgroud)

为了简洁起见,我保持代码简洁.我想要做的是遍历数组来比较ID.

Ber*_*rgi 5

这看起来不像"多维数组",而是像树一样.循环一个级别可以通过简单的for循环完成:

for (var i=0; i<Options.length; i++) // do something
Run Code Online (Sandbox Code Playgroud)

要按顺序循环树,您需要一个递归函数:

function loop (children, callback) {
    for (var i=0; i<children.length; i++) {
        callback(children[i]);
        loop(children[i].children, callback);
    }
}
loop(Options, console.log);
Run Code Online (Sandbox Code Playgroud)

要通过id获取所有子项,以便可以遍历id(无论树结构如何),请使用查找表:

var nodesById = {};
loop(Options, function(node) {
    nodesById[node.id] = node;
});
// access:
nodesById[4];
Run Code Online (Sandbox Code Playgroud)

...并按照id排序循环,你现在可以做到

Object.keys(nodesById).sort(function(a,b){return a-b;}).forEach(function(id) {
    var node = nodesById[id];
    // do something
});
Run Code Online (Sandbox Code Playgroud)