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. 【Oracle/Java】多表插删数据单多线程比较

    源码下载:https://files.cnblogs.com/files/xiandedanteng/OracleAccessComparison20191117.rar 做这个比较工程初衷是:我在单 ...

  2. OpenJudge计算概论-最大奇数与最小偶数之差的绝对值

    /*============================================================= 最大奇数与最小偶数之差的绝对值 总时间限制: 1000ms 内存限制: ...

  3. OpenJudge计算概论-矩阵交换行

    /*======================================================================== 矩阵交换行 总时间限制: 1000ms 内存限制: ...

  4. celery的介绍和在爬虫的中使用

    https://mp.weixin.qq.com/s/FzvZHQpF5mhV9t_HBzlcwg

  5. zblog模板怎么安装?zblog主题安装教程

    有很多初次使用zblog的新手还会问我“zblog模板怎么安装?”,那么本文就专门给大家介绍下zblog主题安装教程. zblog现在分为zblogasp和zblogphp两个版本,两个版本的模板主题 ...

  6. Eclipse中把项目导出为war包【我】

    项目右键,Export 全部默认一路下一步,选择一个目标文件夹,确定即可.

  7. markdown 测试博客发布

    这是一个测试页面 无序列表 tet test 有序列表 特使团 tetst 引用 This is a test 插入图片 插入链接 baidu 粗体 这是粗体 斜体 这是斜体 表格 IP VIP 备注 ...

  8. PAT 甲级 1042 Shuffling Machine (20 分)(简单题)

    1042 Shuffling Machine (20 分)   Shuffling is a procedure used to randomize a deck of playing cards. ...

  9. matlab学习——04图与网络(最短路,最小生成树,最大流)

    04图与网络 1.最短路 (1) 自己写的dijstra算法 format compact; clc,clear all a=zeros(6); a(1,2)=50;a(1,4)=40;a(1,5)= ...

  10. 启后台JOB处理单据遇到锁定问题

    /用户XXX已经处理采购凭证 9000036590 DN过账失败:/已冻结临时过账:用户 XXX已冻结编号范围 /用户XXX已经处理采购凭证 9000036589   ???问题:怎么检查采购订单正在 ...