2010-07-20 84 views
0

在JavaScript中,如何在給定一個對象的字符串中獲得完整的祖先層次結構?現在我甚至不能考慮如何提出問題......所以我甚至無法谷歌它。這裏有一個例子:Javascript:以字符串形式獲得完整的對象層次結構

var lvl1 = { one: "one", two: "two" }; 
lvl1.lvl2 = {flip:"flip", flam:"flam"}; 
lvl1.lvl2.lvl3 = {who:"who", what:"what"}; 

test(o) { 
    alert(hierarchyToString(o)); 
} 

var tmp = lvl1.lvl2.lvl3; 
test(tmp); 

我想看看:

"lvl1.lvl2.lvl3" 

可能嗎?如果我通過了最終的葉子串:

test(lvl1.lvl2.lvl3.what); 

可能嗎?希望代碼是有道理的...只是在我頭頂...

謝謝!

回答

2

不可能使用普通的JavaScript對象,因爲沒有parent引用。有關更多詳細信息,請參閱此question

不幸的是,從字符串表示到對象很容易,但不是相反。您將不得不明確編碼每個對象中的父引用,並且每個葉節點都能夠向上遍歷。

+1

謝謝Anurag ......今天我明顯腦死亡(還沒有睡過幾次)......當然一個對象可能被許多其他對象引用,因此你不能指望它有一個單一的父母,這使我的問題愚蠢:) – 2010-07-21 01:23:07

0

你可以做這樣的事情,但它不能識別的根元素的名稱..

var lvl1 = { one: "one", two: "two" }; 
lvl1.lvl2 = {flip:"flip", flam:"flam"}; 
lvl1.lvl2.lvl3 = {who:"who", what:"what"}; 

function test(o) { 
    for (var item in o) 
    { 
     if (typeof(o[item]) === 'object') 
     { 
      var next = test(o[item]); 
      if (next != '') 
       return item + '.' + next 
      else 
       return item ; 
     } 
    } 
    return ''; 
} 
alert(test(lvl1)); 

而且它只能去outer->inner不角落找尋其他方式..

要確定第一個元素,你可以使用一個空的父節點..

var root={}; 
root.lvl1 = { one: "one", two: "two" }; 
root.lvl1.lvl2 = {flip:"flip", flam:"flam"}; 
root.lvl1.lvl2.lvl3 = {who:"who", what:"what"}; 

alert(test(root));

叫它
相關問題