• 坑爹的数据结构 写了一个转换(已完成)


    将  {LEVELINFO:"中国__江苏__南京",name:"江宁"},{LEVELINFO:"中国__江苏__浙江",name:"杭州"}....
    将这样的数据格式转换为无限嵌套的数据格式 如下:

       

    [
      	{
      		"name":"中国",
      		"list":[
      			{
      				"name":"江苏",
      				"list":[
      					{
      					    "name":"南京",
      					    "list":[
      					    	{"name":"江宁"},
      					    	{"name":"鼓楼"},
      					    	{"name":"浦口"}
      					    ]
      					},
      					{
      					    "name":"浙江",
      					    "list":[
      					    	{"name":"杭州"},
      					    	{"name":".."},
      					    	...
      					    ]
      					}
      				]
      			},
      			{
      				"name":"安徽",
      				"list":[...]
      			}
      		]
      	},
      	{
      		"name":"加拿大",
      		...
      	}
        
      ]
    

      代码如下:

    (function(){
        var toJSON = function(data){
            var treeData={};
            treeData.data=[];
            for(var i=0,len=data.length; i<len; i++){
                var levelInfoArr = data[i].LEVELINFO.split("__");
    
                var obj = {};                                              
                var firstData;
                if(i==0){//i = 0, 创建初始层级
                    obj = this.creatLevel(levelInfoArr,0,obj);
                    treeData.data.push(obj.list[0]);
                }else{
                    //在现有层级插入
                    this.insertLevel(treeData.data,0,levelInfoArr);
                }
            }
            return treeData;
        }
        toJSON.prototype = {
            insertLevel: function(data,index,levelArr){
                var express = "";
                var indexArr = this.searchIndex(data,0,levelArr,[]);//获取插入层级
                for(var i=0,len=indexArr.length; i<len; i++){
                    if(i==0){
                        express += "data[" + indexArr[0] + "]";
                    }else{
                        express += ".list[" + indexArr[i] + "]";
                    }
                }
                //console.log(express);
    
                //创建当前层级需要添加的子层级
                var insertObj;
                if(indexArr.length == levelArr.length){
                    return;
                }else{
                    insertObj = this.creatLevel(levelArr.slice(indexArr.length),0,{}).list[0];
                    //console.log(insertObj);
                }
    
                //向当前层级插入子层级
                if(indexArr.length == 0){//新建第一层级
                    data.push(insertObj);
                }else{
                    (eval(express).list = eval(express).list || []).push(insertObj);
                }
            },
    
            searchIndex: function(data,index,levelArr,res){//flag:截止相同点
                var resObj = {};
                if(index != levelArr.length && data && data.length != 0){ //数组遍历完
                    for(var i=0,len=data.length; i<len; i++){
                        if(data[i].name == levelArr[index]){//层级是否重复
                            res.push(i);
                            this.searchIndex(data[i].list,index+1,levelArr,res);
                        }
                    }
                }
                return res;  //[0,1,0]
            },
    
            creatLevel: function(data,index,res){// data为当前层级数据
                var len = data.length;        
                var obj = {};
                if(len == 1){
                    obj.name = data[index];
                    (res.list = res.list || []).push(obj);
                }else if(index < len-1){
                    obj.name = data[index];
                    obj.list = []; 
                    res.list = res.list || [];
                    res.list.push(this.creatLevel(data,index+1,obj));
                    
                }else if(index == len-1){
                    obj.name = data[index];
                    res.list.push(obj);
                }
                return res;
            }   
        
        }; 
        window.toJSON = toJSON;
    }())
    

      

  • 相关阅读:
    解决linux下fflush(stdin)无效
    《转载》使用Chrome浏览器截取整个网页
    JDK切换版本
    消息队列函数(msgget、msgctl、msgsnd、msgrcv)及其范例
    Oracle 账户
    Oracle linux 安装 相关
    Android高德地图获取当前缩放等级及可视区域四个角的坐标
    Intellij idea 导入项目之后编译错误:无效的源版本:7
    数据库异常整理:org.hibernate.QueryException: could not resolve property: “mStation”
    MySQL(六)多表查询
  • 原文地址:https://www.cnblogs.com/jlliu/p/7744404.html
Copyright © 2020-2023  润新知