2012-11-06 87 views
3

我试图走throught这棵树,并打印所有的“元素”的对象,但它不是我遍历JavaScript的一个树对象

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

代码
+0

但'元素'被重复了很多次... – elclanrs

+0

是的但它有不同的子元素和名称等一些属性,我想遍历所有'元素'对象 –

回答

3

所以刚刚从你的jsfiddle页面运行JSLint的,我发现了一些东西:

  1. 对象有数字键和值的,但你会如何不同的价值观之间的区别,如果他们有相同的键?换句话说,不能有多个具有相同名称的键,所以具有多个“元素”键的嵌套对象将无效。
  2. 我不认为你可以在for循环中声明元素,请尝试提前声明它:

    var element; for(element in configs){

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

我计算出你的钥匙和固定#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);​ 

的另一种方法具有多个“元素”键,将有一个“元素”数组,它包含的元素的列表。

+0

谢谢,所以问题出在我的JSON对象对 ? –