json回复参考

时间:2012-12-24 19:19:23

标签: javascript jquery data-structures tree

我有一个分层的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

2 个答案:

答案 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)

你有一个无限循环。

您正在将每个对象的父级设置为自身。