Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.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 json反向引用_Javascript_Jquery_Data Structures_Tree - Fatal编程技术网

Javascript json反向引用

Javascript json反向引用,javascript,jquery,data-structures,tree,Javascript,Jquery,Data Structures,Tree,我有一个层次化的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], hie

我有一个层次化的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);
    }
}

但这是一个错误<代码>超过了最大调用堆栈大小

您有一个无限循环

您正在将每个对象的父对象设置为其自身。

因为您这样做了

for(var i in hierarchy){
添加
parent
属性后,
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;
}

或者,如果您只需要在较新的解释器上使用它,您可以尝试使父属性不可计算:

但我正在传递
附加回\u引用(层次[I],层次)
因此
层次[I]。将执行parent=hierarchy
。我忽略了这一点。而且我发现如果在层次结构中间有一个数组,它也不起作用,你能告诉我如何处理数组吗?所以它将父对象分配给第一个对象(非数组)祖先?