1
回答
字符串形式的树节点信息,如何转换层具有层次结构的json数据格式
科大讯飞通用文字识别100000次/天免费使用。立即申请   

原始的字符串树节点信息({id,pid,xx,xxx,xx}),每个节点信息用分号分割:

var resultSet="2,0,333,生产管理系统;8,2,日历作业率查询,http://www.baidu;5,2,生产日志查询,http://www.baidu.com;6,2,故障时间,http://www.baidu.com;7,2,月作业时间查询";

转换成json数据格式:

 var indexData={ id:2,pid:0,text: '综合管理系统',isexpand:false, children: [
  {id:33,pid:2,url:" http://www.baidu.com/",text:"人资管理系统",children:[{url:" http://www.baidu.com/",text:"原件管理系统dae"}]}

我写的脚本:

<script type="text/javascript">
//对象模板
function treeNode(id,pid,url,text,children){
 this.id = id;
 this.pid = pid;
 this.url = url;
 this.text = text;
 this.children = children;
 }

      
//root是根节点,nodes 是个数组,通过前面变量resultSet.split(";")得到的每个节点信息 
 function buildTree(root,nodes){
  //保存root子节点
  var childrens = new Array(); 
  //遍历得到root的子节点
  for(i=0;i<nodes.length;i++){
        //分割得到节点的每个属性
  var attrs = nodes[i].split(",");
  //定义一个新节点, 
  var newNode = new treeNode(attrs[0],attrs[1],attrs[2],attrs[3],new Array());
  alert(newNode.children.length);
     //如果找到子节点
     if(newNode.pid==root.id){       
   //递归查找newNode的子节点
   buildTree(newNode,nodes);
   //把它添加到root的childrens中
      childrens[childrens.length] = newNode; 
    
      }     
                }
  //查找完添加到root的children属性中 
  root.children=childrens;
 }

</script>

测试:

<body>
<script type="text/javascript">
 ///var children = new Array();
 //document.write(children.length);
 var resultSet="9,2,月轧费率查询,http://www.baidu.com;8,2,日历作业率查询,http://www.baidu;5,2,生产日志查询,http://www.baidu.com;6,2,故障时间,http://www.baidu.com;7,2,月作业时间查询";
 var nodes = resultSet.split(";");
 var attrs = ("2,0,333,生产管理系统").split(",");
 var root = new treeNode(attrs[0],attrs[1],attrs[2],attrs[3],new Array());
 buildTree(root,nodes);
 alert("root.children.length="+root.children.length);
</script>
</body>

问题:只添加了一个,不知道递归哪出了问题????

<无标签>
举报
LGSE
发帖于5年前 1回/539阅
共有1个答案 最后回答: 5年前

错在:

for(i=0;i<nodes.length;i++){

改成

for(var i=0;i<nodes.length;i++){
如果不加var定义,i会变成全局变量,第一次递归后i为5,到主程序就直接退出循环了,所以只添加了一个node
--- 共有 1 条评论 ---
LGSE谢谢啊,大神啊!!我不怎么写过js,所以基础不是很好,开始我用var i的时候,它dw老是提示错误,所以我以为不能用var i. 5年前 回复
顶部