js list转tree

//------------------------------------List Convert to Tree ----------------------------------------------------//
/**
* 将list装换成tree 封装到JqueryUtils
* @param {Object } id 节点主ID
* @param {Object } pId 父节点ID
* @param {Object } list list数据
* @return {Node} - 自定义Node树节点
* @author Jason - jasonandy@hotmail.com
*/
function listToTree(id,pId,list){ convertToNodeList(list);
/**
* @param {} list list
* @param {} pId 父节点
* @return {Boolean} 是否存在父节点
* @description now.id = other.pid other 的父节点为 noew
*/
function exists(list, pId){
for(var i=0; i<list.length; i++){
if (list[i][id] == pId){
return true;
}
}
return false;
} /**
* 树节点数据 最终数据结构
* @type Node treeNode
*/
var nodes = []; /**
* 将所有的节点数据装入List
* @type Number
*/
for(var i=0; i<list.length; i++){
var row = list[i];
if (!exists(list, row[pId])){//now.pid != new.id
nodes.push(row);//new ids
}
} /**
* 父节点
* @type Node
*/
var pNodes = []; /**
* 将所有的子节点数据装入 pNodes
* @type pNodes
*/
for(var i=0; i<nodes.length; i++){
pNodes.push(nodes[i]);
} /**
* 循环处理所有节点数据并进行封装
*/
while(pNodes.length){ /**
* 把数组的第一个元素从其中删除,并返回第一个元素的值
* the parent node
*/
var node = pNodes.shift(); /**
*
* get the children nodes
*/
for(var i=0; i<list.length; i++){
var row = list[i];
/**
* 取出list所有数据 比较处理
*
* 这里可以定制化 Node 节点数据结构
* {
* "isActive": true,
* "isRoot": true,
* "title": "标题1",
* "items": [
* {
* "text": "内容1"
* },
* {
* "text": "内容2"
* }
* ]
* }
*/
if (row[pId] == node[id]){
/**
* 如果有items 直接放入
*/
if (node.items){
node.items.push(row);
} else {
node.items = [row];
}
pNodes.push(row);
}
}
}
return nodes;
} /**
* Node 节点数据封装
* @param {} list 转为map结构数据
* @return {} list 需要转换的list
*/
function convertToNodeList(list){
$.each(list,function(i,e){
e['title'] = e.NAME;
e['isRoot'] = (e.PARENT_ID == '-1');
e['isActive'] = (e.ENABLE_STATUS == '01');
})
return list;
}
//------------------------------------List Convert to Tree End----------------------------------------------------//
  

最新文章

  1. JS获取回车事件(兼容各浏览器)
  2. 二、JavaScript语言--JS基础--JavaScript进阶篇--浏览器对象
  3. 第一篇:SOUI是什么?
  4. 闭包的理解-from my own opinion
  5. linux下安装openssh-server
  6. 【php学习】mysql数据库操作
  7. https://my.oschina.net/huangyong/blog/161419
  8. A sample of procedure in using
  9. java.lang.ClassNotFoundException: org.hibernate.annotations.common.reflection.MetadataProvider
  10. 实习笔记-1:sql 2008r2 如何创建定时作业
  11. TP开发小技巧
  12. Java基础知识强化87:BigInteger类之BigInteger加减乘除法的使用
  13. wpf Visibility 动画
  14. effective c++ 条款8 prevent exception from leaving destructor
  15. 用 Identity Server 4 (JWKS 端点和 RS256 算法) 来保护 Python web api
  16. [Python Study Notes] 编程仪式感的Hello World!
  17. &nbsp;&nbsp;&nbsp;&nbsp;My GitHub
  18. Codeforces13E - Holes
  19. javascript中的数组对象
  20. Python实现图像边缘检测算法

热门文章

  1. nginx配置监控
  2. Django 测试开发2
  3. SVN分支创建与合并
  4. Webservice初体验:axis调用wsdl和document解析
  5. Matrix学习
  6. bing map for wpf 怎么显示中文地图
  7. 002-02-RestTemplate-初始化调用流程
  8. ubuntu server 18.04 单机安装openstack
  9. web自动化-selenium+Chrome驱动国内下载地址+驱动对应Chrome版本号
  10. Docker 部署 ELK 收集 Nginx 日志