Javascript 通过嵌套对象集合的递归始终在第一个叶节点处终止

Javascript 通过嵌套对象集合的递归始终在第一个叶节点处终止,javascript,recursion,Javascript,Recursion,我有一个类似目录的对象集合,每个对象都有一个相同类型对象的数组作为属性。这种结构从一个根开始,实现对长度没有理论上的限制 以下是对象集合: var filesystemObjects = [ { path: '/', children: [ { path: '/users', children: [

我有一个类似目录的对象集合,每个对象都有一个相同类型对象的数组作为属性。这种结构从一个根开始,实现对长度没有理论上的限制

以下是对象集合:

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:
                        [

                        ]
                    },
                ]
            },
        ]
    },
];
访问每个节点(并通过扩展返回与路径查询字符串匹配的对象)似乎应该是相当简单的,尽管不是特别有效。代码不会因为分号或括号而编译失败

以下是我使用的测试方法:

function directoryRecurse(dir) {
    console.log(dir);
    for (ii = 0; ii < dir.children.length; ii++) {
        directoryRecurse(dir.children[ii]);
    }
}
函数目录递归(dir){
console.log(dir);
对于(ii=0;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]);
    }
}
函数目录递归(dir){
console.log(dir);
对于(ii=0;ii
您需要将变量声明为局部变量,以便每个递归步骤不会相互干扰:

for (var ii = 0; ii < dir.children.length; ii++) {
//   ^^^
for(变量ii=0;ii
将逗号放在哪里?(这不是编译时错误。根本没有错误。)给我一个完整代码的文件,如果不是编译器错误,它必须是内部的。我已经添加了完整的对象集合。这和我完整粘贴的方法是相关代码的全部。你的函数如何调用?@Ja͢ck在测试用例中,带有directoryRecurse(filesystemObjects[0])。@nem当你说“工作正常”时你的确切意思是什么?在Chrome和Firefox上,我只得到四个结果,终止于
/users/firstuser/documents
。能够看到整个内容不是问题-我需要能够访问节点对象,而不仅仅是打印一个字符串,该字符串恰好包含其中某个字符串表示。完美!非常感谢。我对javascript有点陌生,没有意识到
var ii
ii
之间有语义上的差异(我知道这是一个足够愚蠢的问题,需要做一个alt帐户)