zoukankan      html  css  js  c++  java
  • 坑爹的数据结构 写了一个转换(已完成)

    将  {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;
    }())
    

      

  • 相关阅读:
    JAVA获取昨天、今天、明天等日期
    IDEA设置调用方法时提示方法上的注释
    Hibernate使用distinct返回不重复的数据,使用group by 进行分组
    SpringBoot 自定义注解
    tailwindcss 使用总结
    nodejs nvm 包管理
    macos NPM 全局安装解决方案
    git 遇到修改github密码导致本地push失败解决方案
    Jupyter 快捷方式设置
    Vue indent eslint缩进webstorm冲突解决
  • 原文地址:https://www.cnblogs.com/jlliu/p/7744404.html
Copyright © 2011-2022 走看看