2010-02-16 44 views
2

好吧,所以這不應該很難,但是我遇到了怪異和bizarra錯誤。在Javascript中將數組打包到數組中

我想收拾一棵樹到一個數組,其中每個節點是一樣的東西:

  • 標題:字符串的顯示
  • 鍵:ID-值
  • 孩子:數組子節點

的僥倖就是這麼奇怪我無法理解它在所有:當我嘗試將子項添加到節點,我像做

if(node.children == undefined) { 
    node.children = new Array(); 
} 

node.children.push({ title: value, key: key }); 

這是刪除一些以前插入節點....所以我做了一些調試,發現這個代碼:

if(node.children == undefined) { 
    node.children = new Array(); 
} 

有過錯,不使所有任何意義 - 節點。 children = new Array()不應該刪除任何如果node.children未定義......,對嗎?

我做錯了什麼?如果是這樣,我該如何在JavaScript中將樹打包到數組中?

+0

這似乎完全無關在陣列中存儲的樹結構的問題。 – 2010-02-16 00:18:39

回答

1

您是否嘗試過in運算符?

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

您使用undefined值的方式與Javascript標準慣例不一致。我不確定這是否能解決您的問題,但請嘗試將您的代碼更改爲

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

這可能確實有幫助。另外,如您所見,使用Array構造函數是不必要的:[]創建一個新的空數組。

未定義不是Javascript中的實際保留字。沒有什麼能夠阻止你設置

undefined = 2; 

之後任何比較它將表現不可預測。

+0

+1。 OP可能不會這樣做,但是如果包含代碼,那麼聲明一個名爲undefined的變量應該是完美的AFAIK。所以代碼可以改爲:var undefined; if(node.children === undefined){node.children = []; }。當然,只有在大量代碼中爲此使用相同的變量時,這纔是有用的。雖然字符串比較總是給我錯誤的方式。 – 2010-02-16 03:21:00

1

要檢查的對象上存在的屬性,使用hasOwnProperty

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