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----------------------------------------------------//
  

JavaScript list转tree的更多相关文章

  1. 配置Tree Shaking来减少JavaScript的打包体积

    译者按: 用Tree Shaking技术来减少JavaScript的Payload大小 原文: Reduce JavaScript Payloads with Tree Shaking 译者: Fun ...

  2. 实用的树形菜单控件tree

     jQuery plugin: Treeview  这个插件能够把无序列表转换成可展开与收缩的Tree. jQuery plugin: Treeview  jQuery  jstree  jsTree ...

  3. MVC4中EasyUI Tree异步加载JSON数据生成树

      1,首先构造tree接受的格式化数据结构MODEL /// <summary> /// 定义EasyUI树的相关数据,方便控制器生成Json数据进行传递 /// </summar ...

  4. e3.tree参考手册

    简介 1. E3.Tree是E3平台下一个用于构造树型UI(menu,tree,outlookbar等)的的组件, E3.Tree 特色  部署简单,只需要把相关jar放到WEB-INF/lib目录 ...

  5. easyui struts后台实现tree返回json数据

    首先jsp页面有一ul用于展现tree <ul id="trueULid"></ul> 加载tree <script type="text/ ...

  6. EasyUI tree扩展获取实心节点

    <script type="text/javascript"> //扩展 获得tree 的实心节点 $(function(){ $.extend($.fn.tree.m ...

  7. EasyUI tree 异步树与采用扁平化实现的同步树

    所谓好记性不如烂笔头,为了以防忘记,才写下这篇博客,废话不多.. 异步树: tips:   可以采用easyui里的原始数据格式,也可以采用扁平化的数据格式. 使用场景: 当菜单模块数量庞大或者无限极 ...

  8. 使用jQuery开发tree插件

    1.插件截图 2.插件使用 首先引入jquery库,然后引入tree.js.tree.css文件,如下: <script type="text/javascript" src ...

  9. 12、jquery的tree组件

    1. <!--jquery 的主文件...--> <script type="text/javascript" src="../../js/jquery ...

随机推荐

  1. qt 添加程序插件目录

    QApplication::addLibraryPath(QApplication::applicationDirPath()); QApplication::addLibraryPath(QAppl ...

  2. secureCRT操作redis-cli时, 不断追加ip:port

    Session Options-->Terminal-->Emulation-->Terminal为Linux

  3. https://www.atlassian.com/git/tutorials/git-gc

    https://www.atlassian.com/git/tutorials/git-gc The git gc command is a repository maintenance comman ...

  4. PyTorch Tutorials 4 训练一个分类器

    %matplotlib inline 训练一个分类器 上一讲中已经看到如何去定义一个神经网络,计算损失值和更新网络的权重. 你现在可能在想下一步. 关于数据? 一般情况下处理图像.文本.音频和视频数据 ...

  5. mac安装 bcolz出现错误

    使用的是命令pip install bcolz c-blosc//snappy-stubs-:: fatal error: 'algorithm' file not found #include &l ...

  6. Mybase解决保存文件后再打开不能修改编辑

    1.问题复现 2.解决方式 3.可以修改编辑

  7. CentOS 端口和防火墙操作

    Centos 7 端口和防火墙命令: 查看已经开放的端口:firewall-cmd --list-ports 开启端口:firewall-cmd --zone=public --add-port=80 ...

  8. svn如何撤销之前某个版本所做的改变

    撤销这个版本所做的修改:(撤销这个版本所做的修改) 右键项目svn->show log->revert changes from this revision 如果要恢复到某个版本:(这个版 ...

  9. Spring 分布式事务详解

    在学习分布式事务的过程中会遇到以下关键名词: 相关名词: XA :XA规范的目的是允许多个资源(如数据库,应用服务器,消息队列,等等)在同一事务中访问,这样可以使ACID属性跨越应用程序而保持有效.X ...

  10. Laravel用户认证系统的实现细节

    原文地址:http://www.php.cn/php-weizijiaocheng-406076.html 这篇文章主要介绍了关于Laravel用户认证系统的实现细节,有着一定的参考价值,现在分享给大 ...