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){

parentプロパティを追加した後、 の 1 つの値が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 に答える