递归对象的嵌套集合总是终止于第一个叶节点
Recursing through nested collections of objects always terminates at first leaf node
我有一组类似目录的对象,每个对象都有一个 属性 同类对象的数组。此结构以单根开始,并且实现对长度没有理论上的限制。
这是对象集合:
var filesystemObjects = [
{
path: '/',
children:
[
{
path: '/users',
children:
[
{
path: '/users/firstuser',
children:
[
{
path: '/users/firstuser/documents',
children:
[
]
},
]
},
{
path: '/users/seconduser',
children:
[
{
path: '/users/seconduser/documents',
children:
[
]
}
]
},
]
},
{
path: '/programFiles',
children:
[
]
},
{
path: '/kurfleOS',
children:
[
{
path: '/kurfleOS/passwd',
children:
[
]
},
]
},
]
},
];
访问每个节点(以及 return 与路径查询字符串匹配的对象)似乎应该是相当简单的,尽管不是特别有效。代码不会因为分号或者括号编译失败。
这是我使用的测试方法:
function directoryRecurse(dir) {
console.log(dir);
for (ii = 0; ii < dir.children.length; ii++) {
directoryRecurse(dir.children[ii]);
}
}
但每次,该方法仅搜索(并打印)直到到达第一个叶节点(/users/firstuser/documents
,在本例中),输出完全停止。完全没有错误,该方法到那时为止都按预期工作。我真的不确定为什么,特别是因为相同的算法,经过表面修改,对于包含等的数组的数组完全按照预期工作。就允许此方法实际遍历整个根而言,我到底错过了什么?
path: '/users/seconduser',
children:
[
{,// try this and for ascending lines as well
//Why did you not put a comma here wouldn't this end
//your execution. You have commas on all other lines you say execute
.
问题是您在递归函数中使用了全局变量:
function directoryRecurse(dir) {
console.log(dir);
for (ii = 0; ii < dir.children.length; ii++) {
// ^^
directoryRecurse(dir.children[ii]);
}
}
您需要将变量声明为局部变量,以便每个递归步骤不会相互干扰:
for (var ii = 0; ii < dir.children.length; ii++) {
// ^^^
我有一组类似目录的对象,每个对象都有一个 属性 同类对象的数组。此结构以单根开始,并且实现对长度没有理论上的限制。
这是对象集合:
var filesystemObjects = [
{
path: '/',
children:
[
{
path: '/users',
children:
[
{
path: '/users/firstuser',
children:
[
{
path: '/users/firstuser/documents',
children:
[
]
},
]
},
{
path: '/users/seconduser',
children:
[
{
path: '/users/seconduser/documents',
children:
[
]
}
]
},
]
},
{
path: '/programFiles',
children:
[
]
},
{
path: '/kurfleOS',
children:
[
{
path: '/kurfleOS/passwd',
children:
[
]
},
]
},
]
},
];
访问每个节点(以及 return 与路径查询字符串匹配的对象)似乎应该是相当简单的,尽管不是特别有效。代码不会因为分号或者括号编译失败。
这是我使用的测试方法:
function directoryRecurse(dir) {
console.log(dir);
for (ii = 0; ii < dir.children.length; ii++) {
directoryRecurse(dir.children[ii]);
}
}
但每次,该方法仅搜索(并打印)直到到达第一个叶节点(/users/firstuser/documents
,在本例中),输出完全停止。完全没有错误,该方法到那时为止都按预期工作。我真的不确定为什么,特别是因为相同的算法,经过表面修改,对于包含等的数组的数组完全按照预期工作。就允许此方法实际遍历整个根而言,我到底错过了什么?
path: '/users/seconduser',
children:
[
{,// try this and for ascending lines as well
//Why did you not put a comma here wouldn't this end
//your execution. You have commas on all other lines you say execute
.
问题是您在递归函数中使用了全局变量:
function directoryRecurse(dir) {
console.log(dir);
for (ii = 0; ii < dir.children.length; ii++) {
// ^^
directoryRecurse(dir.children[ii]);
}
}
您需要将变量声明为局部变量,以便每个递归步骤不会相互干扰:
for (var ii = 0; ii < dir.children.length; ii++) {
// ^^^