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