Javascript 从js数组创建树
我正在尝试从列表中创建树。我的数据是这样的Javascript 从js数组创建树,javascript,java,tree,Javascript,Java,Tree,我正在尝试从列表中创建树。我的数据是这样的 A-->B-->C-->D-->E.. A-->B-->C-->D-->F.. A-->F-->C-->D-->E.. . . . 我在数组中有所有可能的数据路径。我想这样显示 A -B -C
A-->B-->C-->D-->E..
A-->B-->C-->D-->F..
A-->F-->C-->D-->E..
.
.
.
我在数组中有所有可能的数据路径。我想这样显示
A
-B
-C
-D
-E
-F
-F
-C
-D
-E
如何使用javascript创建和检查?我需要createTreeFunction:)
基本上,您可以为子级使用至少两种不同的结构来构建树,一种是带有数组的结构(解决方案a),另一种是带有对象的结构(解决方案B) 数组相对于对象的优点是直接迭代子对象。对于一个对象,您需要先获取关键点,然后才能进行迭代 否则,如果您认识一个孩子,那么通过密钥进行访问会更快。在树中插入新节点时也是如此 对于子数组,您需要一个函数
getChild
,用于测试是否存在子数组
请注意,提供的数据不会保持标识符的唯一性
解决方案A带有子阵列:
功能节点(id){
this.id=id;
this.children=[];//数组
}
Node.prototype.getChild=函数(id){
var节点;
this.children.some(函数(n){
如果(n.id==id){
节点=n;
返回true;
}
});
返回节点;
};
变量路径=['A-->B-->C-->D-->E','A-->B-->C-->D-->F','A-->F-->C-->D-->E'],
树=新节点(“根”);
path.forEach(函数(a){
var parts=a.split('-->');
部分。减少(功能(r,b){
var节点=r.getChild(b);
如果(!节点){
节点=新节点(b);
r、 推送(节点);
}
返回节点;
},树木);
});
document.getElementById('out').innerHTML=JSON.stringify(树,0,4)代码>
对于这个用例,我发明了非常有用的两种对象方法;即Object.prototype.getNestedValue()
和Object.prototype.setNestedValue()
。通过使用这些方法,这项工作只不过是一个单行JS代码。见下文
Object.prototype.getNestedValue=函数(…a){
返回a.length>1?(this[a[0]!==void 0和this[a[0]]。getNestedValue(…a.slice(1)):this[a[0]];
};
Object.prototype.setNestedValue=函数(…a){
返回a.length>2?此[a[0]==“对象”&此[a[0]!==null?此[a[0]]。setNestedValue(…a.slice(1))
:(此[a[0]]=a[1]==“字符串”?{}:新数组(a[1]),的类型,
此[a[0]].setNestedValue(…a.slice(1)))
:此[a[0]]=a[1];
};
var data=“A-->B-->C-->D-->E\nA-->B-->C-->D-->F\nA-->F-->C-->D-->E”,
datarr=data.split(“\n”).map(e=>e.split(“-->)”),//在数组中获取列表
o={};
datarr.forEach(a=>!o.getNestedValue(…a)和&o.setNestedValue(…a,null));
log(JSON.stringify(o,null,2))代码>Javascript!=请提供一些非无效的数据(按树),或者创建一个循环。请使用唯一标识符。我发现您对console.log()
不满意,并开始对嵌套的东西使用更酷的显示方法。(+)用于您的解决方案。@Redu,是的,该区域太小,无法显示更大的数据结构。
function parseData(data)
{
$.each(data, function (i, p) {
var arr = p.split("--->");
createTreeFunction(p);
});
};
function parseData(data)
{
$.each(data, function (i, p) {
var arr = p.split("--->");
createTreeFunction(p);
});
};