在Javascript中将树打包成数组

时间:2010-02-16 00:15:49

标签: javascript tree-structure javascript-objects

好的,所以这应该不难,但是我遇到了奇怪而奇怪的吸虫。

我正在尝试将树打包成一个数组,其中每个节点都是这样的:

  • title:string-for-display
  • key:id-value
  • children:子节点数组
侥幸是如此奇怪,我根本无法理解它:当我尝试将一个孩子添加到一个节点时,我会做类似的事情

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如果node.children未定义,那么新的Array()不应该删除ANYTHING ......对吧?

我做错了吗?如果是这样,我如何将树打包到Javascript中的数组?

3 个答案:

答案 0 :(得分:4)

您使用undefined值的方式与Javascript标准做法不一致。我不确定这是否能解决您的问题,但请尝试将代码更改为

if (typeof(node.children) == 'undefined') { 
  node.children = [];
}

这可能实际上有所帮助。此外,如您所见,使用Array构造函数是不必要的:[]创建一个新的空数组。

未定义不是Javascript中的实际保留字。没有什么可以阻止你设置

undefined = 2;

之后,任何与它的比较都会出现不可预测的行为。

答案 1 :(得分:1)

您是否尝试过in运营商?

if (!("children" in node))
  node.children = [];

答案 2 :(得分:1)

要检查对象上是否存在属性,请使用hasOwnProperty

if (!node.hasOwnProperty('children')) {
    node.children = [];
}