3

我试图穿过这棵树并打印所有“元素”对象,但它不适用于我

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上的代码

4

1 回答 1

3

因此,仅通过在您的 jsfiddle 页面中运行 JSLint,我就发现了一些事情:

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

    变量元素;对于(配置中的元素){

  3. 如果你真的希望这段代码在这个 jsfiddle 中做一些事情,你将不得不把它放在一个 onLoad 函数中。如果您只是使用 jsfiddle 向我们展示您的代码,那么我希望您实际上是在使用它的任何地方调用它。

我计算了您的密钥并在此处修复了#2 。或者在下面看到它:

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);​

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

于 2012-11-06T08:12:43.610 回答