在每个树节点IE8 Out of堆栈空间中设置对父节点的引用

时间:2013-03-07 19:35:24

标签: javascript internet-explorer-8 tree traversal

json back reference继续。

我只想对层次结构进行travarse并将属性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,它说的是堆栈空间。但是我没有看到它向无限递归的任何地方

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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);
    }
}

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