0

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

4

2 回答 2

1

既然你这样做了

for(var i in hierarchy){

添加属性后, will的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 使属性不可枚举

于 2012-12-24T19:24:57.477 回答
0

你在那里有一个无限循环。

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

于 2012-12-24T19:21:21.250 回答