zoukankan      html  css  js  c++  java
  • JavaScript 将行结构数据转化为树结构数据源(高效转化方案)

    js接收到后台的数据如下

     1 /// 部门信息
     2 var departRows = [{
     3     parentDepartId: 'root',
     4     departId: 'DC',
     5     departName: '集团'
     6 }, {
     7     parentDepartId: 'DC',
     8     departId: '01',
     9     departName: '上海本部'
    10 }, {
    11     parentDepartId: 'DC',
    12     departId: '02',
    13     departName: '中华企业'
    14 }, {
    15     parentDepartId: '02',
    16     departId: '0200',
    17     departName: '中华企业股份有限公司本部'
    18 }, {
    19     parentDepartId: '02',
    20     departId: '0201',
    21     departName: '上海古北(集团)有限公司'
    22 }, {
    23     parentDepartId: '0201',
    24     departId: '020100',
    25     departName: '上海古北(集团)有限公司本部'
    26 }, {
    27     parentDepartId: '0201',
    28     departId: '020101',
    29     departName: '上海古北顾村置业有限公司'
    30 }, {
    31     parentDepartId: '0201',
    32     departId: '020102',
    33     departName: '上海古北京宸置业发展有限公司'
    34 }, {
    35     parentDepartId: '0201',
    36     departId: '020103',
    37     departName: '苏州洞庭房地产发展有限公司'
    38 }];
    View Code

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

     1 /// <summary>
     2 /// 行结构数据转化为树形结构数据
     3 /// </summary>
     4 /// <param name="rows">行结构数据</param> 
     5 /// <param name="attributes">属性信息</param> 
     6 function convertTreeData(rows, attributes) {
     7     var keyNodes = {}, parentKeyNodes = {};
     8     for (var i = 0; i < rows.length; i++) {
     9         var row = rows[i];
    10         row.id = row[attributes.keyField];
    11         row.parentId = row[attributes.parentKeyField];
    12         row.text = row[attributes.textField];
    13         row.children = [];
    14 
    15         keyNodes[row.id] = row;
    16 
    17         if (parentKeyNodes[row.parentId]) { parentKeyNodes[row.parentId].push(row); }
    18         else { parentKeyNodes[row.parentId] = [row]; }
    19 
    20         var children = parentKeyNodes[row.id];
    21         if (children) { row.children = children; }
    22 
    23         var pNode = keyNodes[row.parentId];
    24         if (pNode) { pNode.children.push(row); }
    25     }
    26     return parentKeyNodes[attributes.rootParentId];
    27 }
    View Code

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

    使用方法

    // 属性配置信息
    var attributes = {
        // key对应字段
        keyField: 'departId',
        // 上级key对应字段
        parentKeyField: 'parentDepartId',
        // 文本对应字段
        textField: 'departName',
        // 根节点上级key对应的值
        rootKey: 'root'
    }
    
    var treeData = convertTreeData(departRows, attributes);
    
    // easyui直接解析treeData
    $('#testTree').tree({
        data: treeData
    });
  • 相关阅读:
    FastJson---高性能JSON开发包
    mybatis中大于等于小于等于的写法
    MarkDown 使用说明示例
    Get和Post的参数传值
    规则引擎 资料收集
    ORA-01033错误解决方案
    mybatis 参数为String,用_parameter 取值
    php中实现记住密码下次自动登录的例子
    php 应用 bootstrap-fileinput 上传文件 插件 操作的方法
    AJAX 跨域请求
  • 原文地址:https://www.cnblogs.com/jh007/p/5884873.html
Copyright © 2011-2022 走看看