在Javascript中将树打包到数组中
好吧,这应该不难,但是我遇到了奇怪的和比扎拉的侥幸 我试图将一棵树打包到一个数组中,其中每个节点类似于:在Javascript中将树打包到数组中,javascript,tree-structure,javascript-objects,Javascript,Tree Structure,Javascript Objects,好吧,这应该不难,但是我遇到了奇怪的和比扎拉的侥幸 我试图将一棵树打包到一个数组中,其中每个节点类似于: 标题:用于显示的字符串 关键字:id值 子节点:子节点数组 这个侥幸是如此的奇怪,以至于我完全无法理解它:当我尝试将一个子节点添加到节点时,我会执行以下操作 if(node.children == undefined) { node.children = new Array(); } node.children.push({ title: value, key: key });
- 标题:用于显示的字符串
- 关键字:id值
- 子节点:子节点数组
if(node.children == undefined) {
node.children = new Array();
}
node.children.push({ title: value, key: key });
这是在删除一些以前插入的节点…因此我进行了一些调试,发现以下代码:
if(node.children == undefined) {
node.children = new Array();
}
有错,这根本没有任何意义-node.children=new Array()如果node.children未定义,则不应删除任何内容,对吗
我做错什么了吗?如果是这样,我该如何在Javascript中将树打包到数组中 您是否在操作符中尝试了
if (!("children" in node))
node.children = [];
您使用未定义的值的方式与Javascript标准实践不一致。我不确定这是否能解决您的问题,但请尝试将代码更改为
if (typeof(node.children) == 'undefined') {
node.children = [];
}
这实际上可能会有所帮助。另外,正如您所看到的,不需要使用数组构造函数:[]
创建一个新的空数组
Undefined在Javascript中不是实际的保留字。没有任何东西可以阻止您设置
undefined = 2;
之后,与它的任何比较都将表现出不可预测的行为。要检查对象上是否存在属性,请使用hasOwnProperty
if (!node.hasOwnProperty('children')) {
node.children = [];
}
这似乎与在数组中存储树结构的问题完全无关。+1。OP可能没有这样做,但是如果代码被包含,那么声明一个名为undefined的变量应该是非常好的AFAIK。因此,代码可以更改为:var undefined;如果(node.children==未定义){node.children=[];}。当然,这只有在大量代码中使用相同的变量时才有用。不过,字符串比较总是让我感觉不对劲。