2

好的,所以这应该不难,但是我遇到了奇怪和奇怪的侥幸。

我正在尝试将一棵树打包成一个数组,其中每个节点类似于:

  • 标题:字符串显示
  • 键:id 值
  • 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 未定义,node.children = new Array() 不应该删除任何东西......,对吗?

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

4

3 回答 3

4

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

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

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

Undefined 不是 Javascript 中的实际保留字。没有什么能阻止你设置

undefined = 2;

之后,与它的任何比较都会表现得不可预测。

于 2010-02-16T00:40:18.290 回答
1

你试过in运营商吗?

if (!("children" in node))
  node.children = [];
于 2010-02-16T00:37:49.983 回答
1

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

if (!node.hasOwnProperty('children')) {
    node.children = [];
}
于 2010-02-16T00:41:56.790 回答