Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript中将树打包到数组中_Javascript_Tree Structure_Javascript Objects - Fatal编程技术网

在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=[];}。当然,这只有在大量代码中使用相同的变量时才有用。不过,字符串比较总是让我感觉不对劲。