动态删除无限json对象中的节点(键)

时间:2017-04-13 07:48:22

标签: javascript jquery json recursion

我正在使用无限深度的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中删除该特定节点。我的意思是我有什么方法可以动态地做到这一点吗?

提前致谢。

1 个答案:

答案 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);