JS 数组转树结构代码
2017-08-25 10:26
106 查看
<html> <head> </head> <body> <script> /* *函数定义 *入口参数data,平行数组 *key,id字段 *parentKey,父字段 *map,需要将原始属性名称转换为什么名称 */ function treeUtil(data,key,parentKey,map) { this.data=data; this.key=key; this.parentKey=parentKey; this.treeParentKey=parentKey; //parentKey要转换成什么属性名称 this.treeKey=key; //key要转换成什么属性名称 this.map=map; if(map){ if(map[key])this.treeKey=map[key]; } this.toTree=function () { var data=this.data; var pos={}; var tree=[]; var i=0; while(data.length!=0){ if(data[i][this.parentKey]==0){ var _temp = this.copy(data[i]); tree.push(_temp); pos[data[i][this.key]]=[tree.length-1]; data.splice(i,1); i--; }else{ var posArr=pos[data[i][this.parentKey]]; if(posArr!=undefined){ var obj=tree[posArr[0]]; for(var j=1;j<posArr.length;j++){ obj=obj.children[posArr[j]]; } var _temp=this.copy(data[i]); obj.children.push(_temp); pos[data[i][this.key]]=posArr.concat([obj.children.length-1]); data.splice(i,1); i--; } } i++; if(i>data.length-1){ i=0; } } return tree; } this.copy=function (item) { var _temp={ children:[] }; _temp[this.treeKey]=item[this.key]; for(var _index in item){ if(_index!=this.key && _index!=this.parentKey){ var _property = item[_index]; if((!!this.map) && this.map[_index]) _temp[this.map[_index]]=_property; else _temp[_index]=_property; } } return _temp; } } //使用示例,data需要有key parentKey属性,其它属性内容没有限制。 var data=[ {id:1,parent:0,text:'A'}, {id:2,parent:4,text:"B"}, {id:3,parent:7,text:"C"}, {id:4,parent:1,text:"D"}, {id:5,parent:0,text:"E"}, {id:6,parent:5,text:'B'}, {id:7,parent:4,text:"F"} ]; //简单使用 var tree = new treeUtil(data,'id','parent'); console.log(tree.toTree()); //带属性名称转换 data=[ {id:1,parent:0,text:'A'}, {id:2,parent:4,text:"B"}, {id:3,parent:7,text:"C"}, {id:4,parent:1,text:"D"}, {id:5,parent:0,text:"E"}, {id:6,parent:5,text:'B'}, {id:7,parent:4,text:"F"} ]; var map={"text":"title","id":"id0"}; var tree1 = new treeUtil(data,'id','parent',map); console.log(tree1.toTree()); </script> </body> </html>
结果:
相关文章推荐
- js 高效去除数组重复元素示例代码
- JS数组实现分类统计实例代码
- Jquery操作js数组及对象示例代码
- Node.js 文件夹目录结构创建实例代码
- 看数据结构写代码(19) 数组的实现
- JS数组去重与取重的示例代码
- js中如何把字符串转化为对象、数组示例代码
- 用数组实现js中的堆栈 或者队列数据结构
- JS判断元素是否在数组内的实现代码
- js 处理数组重复元素示例代码
- 一行代码实现js数组去重
- js中基础数据结构数组去重问题
- 两个数组去重的JS代码
- JS随即打乱数组实现代码
- js数组去重。。(拷的别人代码)
- 转译js数组的reduce函数为c#代码
- 堆栈结构代码以及指针数组代码
- Js中radio数组的相关代码
- JS 数组 移除 实现代码