在使用JS做递归的树结构时,函数中的FOR被自己给return出来了,导致循环没有完成
var json={
"type":"class",
"text": "root",
"children": [
{
"type":"class",
"text": "children1",
"children": [
{
"type":"class",
"text": "children1_1",
"children": [
{
"type":"value",
"text": "children1_1_value1"
},
{
"type":"value",
"text": "children1_1_value2"
}
]
}
]
},
{
"type":"class",
"text": "children2",
"children": [
{
"type":"value",
"text": "children2_value1"
},
{
"type":"value",
"text": "children2_value2"
}
]
}
]
};
var xml="<root><class value='root'>";
xml += toxml(json['children']);
xml += "</class></root>";
function toxml(json){
var xml_str="";
for(i=0;i<json.length;i++){
if(json[i]["type"]=="class"){
xml_str += "<class value='"+json[i]['text']+"'>";
xml_str += toxml(json[i]['children']);
xml_str += "</class>";
}else{
xml_str += "<val>"+json[i]['text']+"</val>";
}
}
return xml_str;
}
alert(xml);
这里得出的结果是,究其原因是在"children1"节点循环的时候调用了其本身函数,函数有个return,导致了FOR循环的跳出.导致children2没有循环到.
<root>
<class value="root">
<class value="children1">
<class value="children1_1">
<val>children1_1_value1</val>
<val>children1_1_value2</val>
</class>
</class>
</class>
</root>
我想要得到的结果是
<root>
<class value="root">
<class value="children1">
<class value="children1_1">
<val>children1_1_value1</val>
<val>children1_1_value2</val>
</class>
</class>
<class value="children2">
<val>children2_value1</val>
<val>children2_value2</val>
</class>
</class>
</root>