我有一个分层的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
答案 0 :(得分:1)
既然你做了
for(var i in hierarchy){
添加parent
属性后,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;
}
或者,如果您只需要这个来处理更新的解释器,您可以尝试使父属性不可数:javascript defineProperty to make an attribute non enumerable
答案 1 :(得分:0)
你有一个无限循环。
您正在将每个对象的父级设置为自身。