0

json 反向引用继续。

我只想遍历层次结构并将属性设置parent为其父节点。这样它的双向可遍历

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

上述功能在 chrome、opera、firefox、IE9 中运行良好。除了 IE 8,它说堆栈空间不足。但我没有看到它走向无限递归

4

2 回答 2

0

根据这个答案,IE8 的堆栈限制比其他浏览器小得多,所以我猜你的 javascript 可能实际上已经达到了 IE8 的限制。

于 2013-03-07T21:26:44.607 回答
0

这是您的代码版本,它不使用递归,因此不会受此影响:

function attach_back_reference( hierarchy, parent ) {
    var q = [{obj:hierarchy, p:parent}];
    while( q.length ) {
        var o = q.pop( ), x = o.obj;
        if( x.parent ) {
            continue;
        }
        for( var i in x ) {
            if( jQuery.isPlainObject( x[i] ) ) {
                q.push( {obj:x[i], p: x} );
            } else if( jQuery.isArray( x[i] ) ) {
                for( var j in x[i] ) {
                    q.push( {obj:x[i][j], p: x} );
                }
            }
        }
        o.p && (x.parent = o.p);
    }
}

(如果给定带有循环的图形,它也不会挂起,但这仍然不是一个好主意)

于 2013-03-08T00:47:05.250 回答