js接收到后台的数据如下

 /// 部门信息
var departRows = [{
parentDepartId: 'root',
departId: 'DC',
departName: '集团'
}, {
parentDepartId: 'DC',
departId: '01',
departName: '上海本部'
}, {
parentDepartId: 'DC',
departId: '02',
departName: '中华企业'
}, {
parentDepartId: '02',
departId: '0200',
departName: '中华企业股份有限公司本部'
}, {
parentDepartId: '02',
departId: '0201',
departName: '上海古北(集团)有限公司'
}, {
parentDepartId: '0201',
departId: '020100',
departName: '上海古北(集团)有限公司本部'
}, {
parentDepartId: '0201',
departId: '020101',
departName: '上海古北顾村置业有限公司'
}, {
parentDepartId: '0201',
departId: '020102',
departName: '上海古北京宸置业发展有限公司'
}, {
parentDepartId: '0201',
departId: '020103',
departName: '苏州洞庭房地产发展有限公司'
}];

把行数据转化成树形结构数据源

 /// <summary>
/// 行结构数据转化为树形结构数据
/// </summary>
/// <param name="rows">行结构数据</param>
/// <param name="attributes">属性信息</param>
function convertTreeData(rows, attributes) {
var keyNodes = {}, parentKeyNodes = {};
for (var i = 0; i < rows.length; i++) {
var row = rows[i];
row.id = row[attributes.keyField];
row.parentId = row[attributes.parentKeyField];
row.text = row[attributes.textField];
row.children = []; keyNodes[row.id] = row; if (parentKeyNodes[row.parentId]) { parentKeyNodes[row.parentId].push(row); }
else { parentKeyNodes[row.parentId] = [row]; } var children = parentKeyNodes[row.id];
if (children) { row.children = children; } var pNode = keyNodes[row.parentId];
if (pNode) { pNode.children.push(row); }
}
return parentKeyNodes[attributes.rootParentId];
}

上边方法只使用了一个循环,没有递归、嵌套循环,转化效率相对来说还是比较高效的

使用方法

// 属性配置信息
var attributes = {
// key对应字段
keyField: 'departId',
// 上级key对应字段
parentKeyField: 'parentDepartId',
// 文本对应字段
textField: 'departName',
// 根节点上级key对应的值
rootKey: 'root'
} var treeData = convertTreeData(departRows, attributes); // easyui直接解析treeData
$('#testTree').tree({
data: treeData
});

JavaScript 将行结构数据转化为树结构数据源(高效转化方案)的更多相关文章

  1. JavaScript 将行结构数据转化为树形结构,可提供给常用的tree插件直接使用(高效转化方案)

    前台接收到的数据格式 var rows=[{ parent: 'root', id: 'DC', title: '集团' }, { parent: 'DC', id: '01', title: '上海 ...

  2. JavaScript Table行定位效果

    作者:cloudgamer 时间: 2009-09-17 文档类型:原创 来自:蓝色理想 第 1 页 JavaScript Table行定位效果 [1] 第 2 页 JavaScript Table行 ...

  3. [转载]Selenium実行中にJavaScriptのコードを実行する

    Selenium実行中にJavaScriptのコードを実行する JavaScriptで画面の値を取得/設定するコードをメモ. WebDriverEx.cs // JavaScriptを実行(戻り値なし ...

  4. 痞子衡嵌入式:RT-MFB - 一种灵活的i.MXRT下多串行NOR Flash型号选择的量产方案

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是一种灵活的i.MXRT下多串行NOR Flash型号选择的量产方案. 对于以 i.MXRT 这类没有内部 NVM (Non-Volati ...

  5. javascript 多行字符串

    javascript 字符串多行 平时一般使用 字符串+,或者[].join('')的方式 同事推荐了这样的形式 ExceptionDivHtml="<div class='gameI ...

  6. JavaScript如何把字符串中每个单词首字母转化为大写

    先上代码,再做解释. 思路分析: 1. 首先先把字符串中的单词转化为小写(toLowerCase),再对其进行截取(split),截取依据为按照空格截取: 2. 此时经过步骤一之后得到的东西是一个数组 ...

  7. javascript——选择行之后才可以进行控制操作

  8. javascript 60行编写的俄罗斯方块游戏

    转自 http://***/share/1759652641295360.htm <!doctype html><html><head></head>& ...

  9. spring 多数据源一致性事务方案

    spring 多数据源配置 spring 多数据源配置一般有两种方案: 1.在spring项目启动的时候直接配置两个不同的数据源,不同的sessionFactory.在dao 层根据不同业务自行选择使 ...

随机推荐

  1. EventBus 报“Subscriber class already registered to event class”错误

    这句子的话意思也很容易理解,“接收者类已经被注册为事件类了”. 之前我是这么写: 事件注册是写在onStart()里面的 @Override protected void onStart() { su ...

  2. ubuntu下nginx+PHP-FPM安装配置

    安装nginx apt-get install nginx 配置nginx 位置: /etc/nginx/nginx.conf  ,其中包含了 include /etc/nginx/conf.d/*. ...

  3. SQLite -语法

    SQLite -语法 SQLite是紧随其后的是独特的组称为语法的规则和指导方针.本教程为您提供了快速启动和SQLite的清单的所有基本SQLite语法. 大小写敏感性 注意重要的一点是,SQLite ...

  4. Django请求,响应,ajax以及CSRF问题

    二.request对象常用属性: Attribute Description path 请求页面的全路径,不包括域名端口参数.例如: /users/index method 一个全大写的字符串,表示请 ...

  5. DELETE - 删除一个表中的行

    SYNOPSIS DELETE FROM [ ONLY ] table [ WHERE condition ] DESCRIPTION 描述 DELETE 从指明的表里删除满足 WHERE 子句的行. ...

  6. 搜索 || DFS || POJ 2488 A Knight's Journey

    给一个矩形棋盘,每次走日字,问能否不重复的走完棋盘的每个点,并将路径按字典序输出 *解法:按字典序输出路径,因此方向向量的数组按字典序写顺序,dfs+回溯,注意flag退出递归的判断,并且用pre记录 ...

  7. django 127.0.0.1 将您重定向的次数过多

    "GET /?next=/%3Fnext%3D/%253Fnext%253D/ HTTP/1.1" 302 0 solution reference from django.con ...

  8. 客户端和服务器最多能发送和接收多少TCP连接数?

    1. 对于服务器,每一个tcp连接都要占一个文件描述符,一旦这个文件描述符使用完了,就会返回错误. 我们知道操作系统上端口号1024以下是系统保留的,从1024-65535是用户使用的.由于每个TCP ...

  9. Centos7中yum安装jdk及配置环境变量

    系统版本 [root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) #安装之前先查看一下有无系统 ...

  10. Centos 7 编译nginx 1.14.0

    步骤一:下载nginx安装包 wget https://nginx.org/download/nginx-1.14.0.tar.gz 步骤二:安装nginx依赖包 yum install -y gcc ...