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. TynSerial流的序列(还原)

    TynSerial流的序列(还原) procedure TForm1.ToolButton18Click(Sender: TObject); var serial: TynSerial; ms, ms ...

  2. C++利用openssl进行公钥解密

    私钥加密的部分内容,需要用公钥解密下面的实例代码,由于私钥加密后的字符串有不可打印字符,所以程序里面进行了base64,要用的时候先解dec base64 再传递给函数 进行解密 #include & ...

  3. C# 读取文件内容

    读取文件内容有三种方式 全部读取到字符串变量中 一次读取一行 全部读取到字符串数组中,每个数组元素存储一行文本 全部读取到字符串变量 string text = System.IO.File.Read ...

  4. SQL-W3School-函数:SQL GROUP BY 语句

    ylbtech-SQL-W3School-函数:SQL GROUP BY 语句 1.返回顶部 1. 合计函数 (比如 SUM) 常常需要添加 GROUP BY 语句. GROUP BY 语句 GROU ...

  5. Swift_IOS之UIActivityIndicatorView加载齿轮控件

    // // ViewController.swift // helloIOS // // Created by loaderman on 2019/1/25. // Copyright © 2019年 ...

  6. python代码-leetcode1 两数相加

    1.两个循环 class Solution: def twoSum(self, nums, target): n=len(nums) for i in range(n): for j in range ...

  7. js实现文本框支持加减运算的方法

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/T ...

  8. osg qt fbx ifc bim osg ive 3ds max rvt

    项目环境变量配置 include E:\Qt\Qt5.12.2\5.12.2\msvc2017_64\include E:\OpenSourceGraph\OpenSceneGraph_install ...

  9. 【AI教育】可以看看行业痛点分析

    http://www.woshipm.com/it/2801582.html 至于解决方案嘛,还在堆砌技术的阶段.

  10. (十)会话跟踪技术之Session

    ---部分转自孤傲苍狼博客 一.Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此 ...