Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将每个树节点IE8中对父节点的引用设置回堆栈空间之外_Javascript_Internet Explorer 8_Tree_Traversal - Fatal编程技术网

Javascript 将每个树节点IE8中对父节点的引用设置回堆栈空间之外

Javascript 将每个树节点IE8中对父节点的引用设置回堆栈空间之外,javascript,internet-explorer-8,tree,traversal,Javascript,Internet Explorer 8,Tree,Traversal,从…继续 我只想转换一个层次结构,并将一个属性parent设置为其父节点。所以它是双向的 function attach_back_reference(hierarchy, parent){ for(var i in hierarchy){ if(jQuery.isPlainObject(hierarchy[i])) attach_back_reference(hierarchy[i], hierarchy);

从…继续

我只想转换一个层次结构,并将一个属性
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中的堆栈空间外。但我看不到它会走向无限递归,因为IE8的堆栈限制比其他浏览器小得多,所以我猜你的javascript可能已经达到了IE8的限制

这是一个不使用递归的代码版本,因此不会出现这种情况:

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);
    }
}

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

如果树中有某种循环,我建议添加if(hierarchy.parent)return;在函数的顶部。