数据如下:
谢谢!今天有点累,阅读代码有点困难。不过最好是描述一下思路。我发帖之后想到了一个思路,就是模拟树的展开的过程。分析如下:
原始数据:originAry
1、遍历originAry,将没有父亲的节点(根节点)找出来。保存到一个列表中,ary0
2、对于ary0里面的每一个节点,从originAry里面找出各自的儿子,并归到自己的名下。而对于这次找到的儿子们保存到ary1里面。
3依次找,直到ary0+ary1+ary..n的长度和与originAry相等,就结束。
整个过程相当与懒加载的树,你展开一个节点,就找节点的儿子。
这个算法的性能如何不说,却很直观。
再次感谢你的答复。
var getTree = (function(){ var merge = function(target, source){ while(source.length > 0){ target.push(source.pop()); } } return function(datas){ var dataMap = {}; var dataTree = {}; while(datas.length > 0){ var data = datas.pop(); if(!data.children) data.children = []; if(data.parentId == -1){ dataTree[data.id] = data; }else{ if(dataMap[data.parentId]){ var children = dataMap[data.parentId].children; children.push(data); }else{ dataMap[data.parentId] = { children:[data] }; } } if(data.children){ merge(datas,data.children); } if(dataMap[data.id]){ merge(data.children,dataMap[data.id].children); } dataMap[data.id] = data; } return dataTree; } })(); 临时写的, 可以参考下。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
暂无简介
文章 0 评论 0
接受
发布评论
评论(2)
谢谢!今天有点累,阅读代码有点困难。不过最好是描述一下思路。我发帖之后想到了一个思路,就是模拟树的展开的过程。分析如下:
原始数据:originAry
1、遍历originAry,将没有父亲的节点(根节点)找出来。保存到一个列表中,ary0
2、对于ary0里面的每一个节点,从originAry里面找出各自的儿子,并归到自己的名下。而对于这次找到的儿子们保存到ary1里面。
3依次找,直到ary0+ary1+ary..n的长度和与originAry相等,就结束。
整个过程相当与懒加载的树,你展开一个节点,就找节点的儿子。
这个算法的性能如何不说,却很直观。
再次感谢你的答复。