为什么我的递归JS函数只捕获JSON输入的第一个子节点?

时间:2011-07-26 14:50:45

标签: javascript json recursion

我在Javascript中遇到了递归问题。我有一些JSON,我正在传递给一个函数。我正在尝试将它从JSON转换为Javascript对象。我的问题是代码只返回FIRST CHILD,而不是第二个(标记为'dir3')。有没有人有建议?非常感谢您的时间。

JSON输入:

    var dirList = {"name": "topdir", "subdirs":
    [
        {"name": "dir2", "subdirs":
            [
                {"name": "dir2a", "subdirs": []},
                {"name": "dir2b", "subdirs": []}
            ]},
        {"name": "dir3", "subdirs": []}
    ]}; //valid JSON

Javascript功能:

getChildren = function(dir) {
    dir.children = [];
    if (dir.subdirs.length == 0) {
        return [];
    } else {
        for (i=0; i<dir.subdirs.length; i++){
            dir.children.push({text: dir.subdirs[i].name, leaf: false, expanded: true, children: getChildren(dir.subdirs[i])});
        }
        return dir.children;
    }
};

1 个答案:

答案 0 :(得分:1)

确保将for循环中的计数器声明为函数中的局部变量。

for (var i=0; i<dir.subdirs.length; i++){

它正在使用全局变量i,这导致循环提前结束(其他一个通过函数的传递将其设置为0)。