javascript 从一组数组 生成一颗树?求解

发布于 2021-11-10 03:21:31 字数 5 浏览 795 评论 2

数据如下:

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

緦唸λ蓇 2021-11-11 17:59:06

谢谢!今天有点累,阅读代码有点困难。不过最好是描述一下思路。我发帖之后想到了一个思路,就是模拟树的展开的过程。分析如下:

原始数据:originAry

1、遍历originAry,将没有父亲的节点(根节点)找出来。保存到一个列表中,ary0

2、对于ary0里面的每一个节点,从originAry里面找出各自的儿子,并归到自己的名下。而对于这次找到的儿子们保存到ary1里面。

3依次找,直到ary0+ary1+ary..n的长度和与originAry相等,就结束。

整个过程相当与懒加载的树,你展开一个节点,就找节点的儿子。

这个算法的性能如何不说,却很直观。

再次感谢你的答复。

回眸一笑 2021-11-10 15:07:50
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;
	}
})();

临时写的, 可以参考下。
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文