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
});

最新文章

  1. TCP的三次握手(建立连接)和四次挥手(关闭连接)
  2. daima
  3. C语言位操作(转)
  4. DJANGO的API跨域实现
  5. 几个 Context 上下文的区别
  6. linux 僵死进程
  7. office365 development
  8. [置顶] Android开发之ProcessState和IPCThreadState类分析
  9. 全陷阱破解:在Linux环境下的Jenkins中持续集成Androidproject
  10. 关于oracle数据库(5)增删改查
  11. python全栈开发第10天-正则表达式
  12. Andoird开发手机壁纸
  13. RabbitMQ之路由
  14. C++ 浅拷贝与深拷贝探究
  15. hiho 1098 最小生成树二&#183;Kruscal算法 (最小生成树)
  16. PythonStudy——函数对象的案例
  17. Spring Enable* 注解
  18. JavaScript大杂烩5 - JavaScript对象的若干问题
  19. cordova- cordova-plugin-splashscreen启动页面和图标的设置
  20. 转载 你不知道的super

热门文章

  1. Android利用已有控件实现自定义控件
  2. word打印小册子
  3. 在2015年 开发一个 Web App 必须了解的那些事
  4. environ - 用户环境(变量)
  5. Bug的分类和管理流程
  6. delphi中使用自定义资源的方法
  7. 输入3个数a,b,c,按大小顺序输出。
  8. Echarts 异步数据加载遇到的问题
  9. 高德地图api之location定位
  10. 前端拖动div 效果