2012-12-24 201 views
0

我有一個層次結構的json對象,我想遍歷它並將一個父節點附加到每個元素。這就是我所做的json返回參考

function attach_back_reference(hierarchy, parent){ 
    hierarchy.parent = parent; 
    for(var i in hierarchy){ 
     if(jQuery.isPlainObject(hierarchy[i])) 
      attach_back_reference(hierarchy[i], hierarchy); 
    } 
} 

但這是給錯誤。 Maximum call stack size exceeded

回答

1

既然你加入parent財產之後做

for(var i in hierarchy){ 

i一個值將是"parent",所以你最終無限設置把孩子當作自己的祖父母。

可以在

var o = {}; 
o.x = o; 
for (var i in o) { alert(i); } 

它提醒"x"看到這一點。

將環移動到頂部。

function attach_back_reference(hierarchy, parent){ 
    for(var i in hierarchy){ 
     if(jQuery.isPlainObject(hierarchy[i])) 
      attach_back_reference(hierarchy[i], hierarchy); 
    } 
    hierarchy.parent = parent; 
} 

另外,如果你只需要這在較新的翻譯工作,你可以嘗試使parent屬性unenumerable:javascript defineProperty to make an attribute non enumerable

+0

謝謝。我忽略了這一點。我也發現,如果我在層次結構中有一個數組,它不起作用 –

+0

也可以告訴我如何處理數組?以便它將父對象分配給第一個對象(非數組)祖先? –

0

你有一個無限循環。

您正在將每個對象的父項設置爲自己。

+0

但我路過'attach_back_reference(層次[I],層次)'所以'層次結構[i] .parent =層次結構將被執行 –