我有这种格式的json数据:
[
{'name':'foo1','id':'1'},
{'name':'foo2','id':'2',children:[
{'name':'foo3','id':'3',children:
[
{'name':'foo4','id':'4'}
]
},
]
},
{'name':'foo','id':'1'},
]
我想从名为foo3
的{{1}}中删除子数组。并且在没有孩子的情况下返回整个数组。
让我们说:我有一个名字foo4
,基于这个值,我想从子键中删除该对象。
:
foo4
过滤后:
{'name':'foo3','id':'3',children:
[
{'name':'foo4','id':'4'}
]
},
这个json对象可以有无限的嵌套子元素。我无法弄清楚如何过滤数组。递归最适合这里吗?
答案 0 :(得分:0)
不要删除数组中的子数组,因为您说它将包含在许多数组中。 你需要做的是在javascript /或任何服务器端lang你可以检查这种情况,如果你的数组有子数组然后什么也不做。
答案 1 :(得分:0)
如果您只需要从第2级向下删除所有内容,我就不会认为递归是最佳选择。您应该检查每个对象的子项,如果他们有自己的孩子,只需删除它们。
var data = [
{'name':'foo1','id':'1'},
{'name':'foo2','id':'2',children:[
{'name':'foo3','id':'3',children:
[
{'name':'foo4','id':'4'}
]
},
]
},
{'name':'foo6','id':'6',children:[
{'name':'foo7','id':'7',children:
[
{'name':'foo8','id':'8',children: [
{'name':'foo9','id':'9'}
]
}
]
},
]
},
{'name':'foo','id':'1'},
];
var filteredData = data;
for(var i = 0; i < filteredData.length; ++i) {
var object = filteredData[i];
if(object.children) {
//the object has property 'children'
for(var j = 0; j < object.children.length; ++j) {
var child = object.children[j];
if(child.children) {
//the child has children of its own
child.children = [];
}
}
}
}
console.log(filteredData);
&#13;
答案 2 :(得分:0)
我使用递归创建了一个函数,该函数接受一个对象数组并在每次x级深度(参数maxDepth
)时清空子数组。
我使用currying来跟踪所有对象的每次递归的级别(xDeep
)。
function removeDeepChildren(data, maxDepth) {
var xDeep = 1;
return function innerRecurring(arr) {
for (var x = 0; x < arr.length; x++) {
if (arr[x].children) {
if (xDeep === maxDepth && arr[x].children) {
arr[x].children = [];
} else {
++xDeep;
innerRecurring(arr[x].children);
}
}
}
}(data);
}
var data = [{'name':'foo1','id':'1'},{'name':'foo2','id':'2','children':[{'name':'foo3','id':'3','children':[{'name':'foo4','id':'4'}]}]},{'name':'foo','id':'1'}];
removeDeepChildren(data, 2);
console.log(data);