我只想对层次结构进行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,它说的是堆栈空间。但是我没有看到它向无限递归的任何地方
答案 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);
}
}
(如果给出带有循环的图形,它也不会挂起,但这仍然不是一个好主意)