这是一个使用Javascript的实现:http :
//jsfiddle.net/9FqKS/
首先,创建基于名称的地图以方便查找。有几种不同的方法可以执行此 *** 作-
在这种情况下,我使用一个
.reduce方法,该方法以一个空对象开头并遍历
data数组,为每个节点添加一个条目:
// create a {name: node} mapvar dataMap = data.reduce(function(map, node) { map[node.name] = node; return map;}, {});
这等效于:
var dataMap = {};data.forEach(function(node) { dataMap[node.name] = node;});
(我有时认为reduce更为优雅。)然后迭代地将每个子代添加到其父代,如果找不到父代,则将其添加到根数组:
// create the tree arrayvar tree = [];data.forEach(function(node) { // find parent var parent = dataMap[node.parent]; if (parent) { // create child array if it doesn't exist (parent.children || (parent.children = [])) // add node to parent's child array .push(node); } else { // parent is null or missing tree.push(node); }});
除非您的树很大,否则我认为这应该不会太昂贵,因此您应该能够在客户端进行 *** 作(如果不能这样做,那么在任何情况下都可能有太多数据无法轻松显示) 。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)