我有一个像这样的 json 对象:
var temp1 = {
name: "AMC",
children: [
{
name: "cde",
children: [
{
name: "AMC",
children: [
{
name: "cde",
children: [
{
name: "AMC",
children: [
//.............. continues as curcular depndency
]
}
]
}
]
}
]
},
{
name: "mnp",
children: [
{
name: "xyz",
children: []
}
]
}
]
}
由于这种循环依赖性,JSON.stringify 失败。 我已经做了足够的谷歌和搜索来获得解决方案,但找不到太多帮助。
所以这里基本上我想检测 json 对象中的循环依赖关系,并向该对象添加一个新键,表示 circular: true 并删除所有后续节点。
所以这是我正在寻找的结果输出:
var temp1 = {
name: "AMC",
children: [
{
name: "cde",
circular: true,
children: [ // No children here as it is curcular dependency
]
},
{
name: "mnp",
children: [
{
name: "xyz",
children: []
}
]
}
]
}
有一种方法,我认为可以解决这个问题,我可以循环遍历所有子级,除非没有子级达到最大 2 级,但这样我会错过深度超过 3 的有效子级。
我希望我的问题很清楚。如果没有,请告诉我,我会尝试进一步扩展。
最佳答案
递归函数解决了这个问题:
function check(stack,parent, obj){
stack = stack || []; //stack contains a list of all previously occurred names
var found = stack.find(function(parent){
return (parent==obj.name && obj.children.length>0); //checks to see if the current object name matches any in the stack.
});
if(!found && obj.children.length>0){
stack.push(obj.name); //adds the current object name to the list.
obj.children.forEach(function(child){
check(stack,obj, child);//recursively checks for all children.
})
}
else if(found){
parent.children=[];
parent.circular=true;
stack.pop(obj.name);
return;
}
else{
return;
}
}
check([],temp1, temp1)
这会导致传递的原始对象发生更改。
希望这有帮助!
关于javascript - 识别 Json 对象中的循环依赖并删除 2 深度后的所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49883894/