JavaScript list转tree
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的更多相关文章
- 配置Tree Shaking来减少JavaScript的打包体积
译者按: 用Tree Shaking技术来减少JavaScript的Payload大小 原文: Reduce JavaScript Payloads with Tree Shaking 译者: Fun ...
- 实用的树形菜单控件tree
jQuery plugin: Treeview 这个插件能够把无序列表转换成可展开与收缩的Tree. jQuery plugin: Treeview jQuery jstree jsTree ...
- MVC4中EasyUI Tree异步加载JSON数据生成树
1,首先构造tree接受的格式化数据结构MODEL /// <summary> /// 定义EasyUI树的相关数据,方便控制器生成Json数据进行传递 /// </summar ...
- e3.tree参考手册
简介 1. E3.Tree是E3平台下一个用于构造树型UI(menu,tree,outlookbar等)的的组件, E3.Tree 特色 部署简单,只需要把相关jar放到WEB-INF/lib目录 ...
- easyui struts后台实现tree返回json数据
首先jsp页面有一ul用于展现tree <ul id="trueULid"></ul> 加载tree <script type="text/ ...
- EasyUI tree扩展获取实心节点
<script type="text/javascript"> //扩展 获得tree 的实心节点 $(function(){ $.extend($.fn.tree.m ...
- EasyUI tree 异步树与采用扁平化实现的同步树
所谓好记性不如烂笔头,为了以防忘记,才写下这篇博客,废话不多.. 异步树: tips: 可以采用easyui里的原始数据格式,也可以采用扁平化的数据格式. 使用场景: 当菜单模块数量庞大或者无限极 ...
- 使用jQuery开发tree插件
1.插件截图 2.插件使用 首先引入jquery库,然后引入tree.js.tree.css文件,如下: <script type="text/javascript" src ...
- 12、jquery的tree组件
1. <!--jquery 的主文件...--> <script type="text/javascript" src="../../js/jquery ...
随机推荐
- mac使用vnc远程登录ubuntu16.04桌面
mac使用vnc远程登录ubuntu16.04桌面 1.安装在Ubuntu上安装x11vnc,如下: sudo apt-get install x11vnc 2.配置vnc密码 x11vnc -sto ...
- 双缓冲技术局部更新原理之派生自SurfaceView
package com.loaderman.customviewdemo; import android.content.Context; import android.graphics.Canvas ...
- php 获得访问者的IP
<?php $user_IP = ($_SERVER["HTTP_VIA"]) ? $_SERVER["HTTP_X_FORWARDED_FOR"] : ...
- NPM 私服
下载https://nodejs.org/en/download/ linux binaries x64版本xz -d ....xztar -xvf ....tar导入path修改~/.bashrc加 ...
- Spring MVC Action参数类型 List集合类型(简单案例)
题目:定义一个员工实体(Employee),实现批量添加员工功能,在表单中可以一次添加多个员工,数据可以不持久化 1,新建一个项目 2, 然后选择Maven框架选择 maven-archetype-w ...
- 【425】堆排序方法(二叉堆)优先队列(PQ)
参考:漫画:什么是二叉堆? 大根堆 小根堆 参考:漫画:什么是堆排序? 参考:漫画:什么是优先队列? 参考:[video]视频--第14周10--第8章排序10--8.4选择排序3--堆排序2--堆调 ...
- 华为OpenStack开源团队人才招募中
职位要求: 1. 三年以上软件开发经验,编程技能良好. 2. 熟练使用Python.Java.Go或其他语言开发. 3. 有OpenStack经验或者存储经验优先考虑. 4. 良好的学习和沟通能力,责 ...
- 123457123457#0#-----com.threeapp.mouseRunner01----儿童老鼠跑酷游戏
com.threeapp.mouseRunner01----儿童老鼠跑酷游戏
- SpringCloud学习成长之 九 服务链路跟踪
这篇文章主要讲述服务追踪组件zipkin,Spring Cloud Sleuth集成了zipkin组件. 一.简介 Spring Cloud Sleuth 主要功能就是在分布式系统中提供追踪解决方案, ...
- spark报错:invalid token
启动spark报错,启动container失败,去看yarn的日志,显示invalid token, 经过排查是hadoop子节点的配置和主节点的配置不一致导致的,同步之后,问题解决.