我正在使用无限深度的json对象。结构有点像这样
{
"RECORDS": [
{
"Idx": 1,
"Child": [
{
"Hidden": "0",
"Node_Type": "SD",
"Idx": 4,
"Parent_Idx": 1
}
]
},
{
"Idx": 2,
"Child": [
{
"Idx": 5,
"Node_Type": "MENU",
"Parent_Idx": 2,
"Child": [
{
"Idx": 6,
"Node_Type": "SD",
"Parent_Idx": 5
}
{
...
...
"Child": ...
}
]
}
]
},
{
"Idx": 3
}
]
}
现在我正在尝试动态删除此嵌套对象中的单个节点。
jsonObj.forEach(deleteJsonRecursively);
function deleteJsonRecursively(item, index){
if (item.Idx == rowId) {
console.log(delete item); // This returns false.
}
else {
if (item.hasOwnProperty('Child')) {
item.Child.forEach(deleteJsonRecursively);
}
}
}
我知道删除项目本身无效。但问题是,如何从jsonObj中删除该特定节点。我的意思是我有什么方法可以动态地做到这一点吗?
提前致谢。
答案 0 :(得分:1)
使用Array.splice从数组中删除元素,请参阅以下代码:
function deleteJsonRecursively( arr ) {
for( var i = 0; i < arr.length; i ++ ) {
var item = arr[i];
if( item.Idx == rowId ) {
arr.splice(i,1); // remove here
i --; // arr.length changed after arr.splice
} else if( item.hasOwnProperty('Child') ) {
deleteJsonRecursively(item.Child);
}
}
}
deleteJsonRecursively(jsonObj.RECORDS);