遍历JavaScript对象树

时间:2012-11-06 08:02:24

标签: javascript json

我正试图穿过这棵树并打印所有“元素”对象,但它不能与我合作

var config = {
"tree": {
    "element": {
        "name": "pd",
        "children": {
            "element": {
                "name": "pd2",
                "children": {}
            },
            "element": {
                "name": "pd3",
                "children": {
                    "element": {
                        "name": "pd6",
                        "children": {}
                    },
                    "element": {
                        "name": "pd5",
                        "children": {
                            "element": {
                                "name": "pd7",
                                "children": {
                                    "element": {
                                        "name": "pd8",
                                        "children": {}
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "element": {
                "name": "pd4",
                "children": {}
            }
        }
    }
}

}

但它只能多次打印两个物体 这是我的代码

    function parseConfig(configs){
    for(var element in configs){
        if (typeof(configs[element])=="object") {
            console.log(configs[element]);
            parseConfig(configs[element]);
        }
      }
     }

以下是jsfiddle

上的代码

1 个答案:

答案 0 :(得分:3)

因此,只需在jsfiddle页面中运行JSLint,我就找到了一些东西:

  1. 一个对象有许多键和值,但如果它们具有相同的键,您将如何区分不同的值?换句话说,您不能拥有多个具有相同名称的键,因此具有多个“元素”键的嵌套对象将无效。
  2. 我认为你不能在for循环中声明元素,尝试提前声明:

    var元素; for(configs中的元素){

  3. 如果您真的希望此代码在此jsfiddle中执行某些操作,则必须将其放入onLoad函数中。如果您只是使用jsfiddle向我们展示您的代码,那么我希望您在使用它的任何地方实际调用它。

  4. 我计算了你的密钥并修复了#2 here。或者在下面看到它:

    var config = {
        "tree": {
            "element": {
                "name": "pd",
                "children": {
                    "element1": {
                        "name": "pd2",
                        "children": {}
                    },
                    "element2": {
                        "name": "pd3",
                        "children": {
                            "element1": {
                                "name": "pd6",
                                "children": {}
                            },
                            "element2": {
                                "name": "pd5",
                                "children": {
                                    "element": {
                                        "name": "pd7",
                                        "children": {
                                            "element": {
                                                "name": "pd8",
                                                "children": {}
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "element3": {
                        "name": "pd4",
                        "children": {}
                    }
                },
                "element": {
                    "name": "pd4",
                    "children": {}
                }
            }
        }
    };
    
    function parseConfig(configs) {
        var element;
        for (element in configs) {
            if (typeof(configs[element]) == "object") {
                console.log(configs[element]);
                parseConfig(configs[element]);
            }
        }
    }
    parseConfig(config);​
    

    拥有多个“元素”键的另一种方法是使用包含元素列表的“elements”数组。