当前位置: 代码迷 >> Java Web开发 >> JS 递归 循环未完成就被RETURN出来的有关问题
  详细解决方案

JS 递归 循环未完成就被RETURN出来的有关问题

热度:3221   发布时间:2016-04-10 23:13:20.0
JS 递归 循环未完成就被RETURN出来的问题.
在使用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>
  相关解决方案