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.
这看起来不像"多维数组",而是像树一样.循环一个级别可以通过简单的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)
| 归档时间: |
|
| 查看次数: |
1823 次 |
| 最近记录: |