如何通过存储其引用来删除JSON属性?

时间:2016-11-02 23:43:19

标签: javascript angularjs json

我有一个存储在范围变量中的JSON对象,比如$ scope.items。

 $scope.items =  
    [  
       {  
          "id":"1",
          "class":"group",
          "label":"ABC",
          "child":[  
             {  
                "id":"2",
                "label":"Reference number",
                "value":"11AA"
             },
             {  
                "id":"3",
                "label":"Received on",
                "value":"3rd Oct"
             }
          ]
       },
       {  
          "id":"4",
          "class":"group",
          "label":"XYZ",
          "child":[  
             {  
                "id":"5",
                "label":"Name",
                "value":"John"
             },
             {  
                "id":"6",
                "label":"Contact",
                "value":"54545882"
             }
          ]
       }
    ]

我需要根据从后端收到的'id'删除JSON元素。现在,假设必须删除ID为6的属性。

delete $scope.items[1].child.splice(1,1); // THIS WORKS!

但是,我需要做这样的事情:

var temp = $scope.items[1].child.splice(1,1);
delete temp;

但是这不起作用,因为'temp'不存储要删除的JSON元素(带有id 6)的引用。

由于我在要动态删除的对象中获取JSON元素的路径,因此我需要存储引用并稍后执行删除操作。或者请建议我这样做的最佳替代方案。谢谢!

3 个答案:

答案 0 :(得分:0)

由于您需要路径是动态的,因此将重要路径元素存储在如下变量中:

var itemNum = 1;
var childNum = 1;

您的代码可以使用任何必要的逻辑动态设置这些变量。然后在您需要删除的代码中,执行以下操作:

$scope.items[itemNum].child.splice(items, 1);

这里你不需要delete命令。只需使用splice即可从child[]数组中删除该项目。

答案 1 :(得分:0)

首先,这是一个对象数组,而不是JSON。

其次,Array.splice()将从数组中删除一系列项目,并将这些项目作为新数组返回。当您将项目拼接出数组时,Angular应该识别范围更改并更新DOM,您不必delete任何内容。

第三,temp变量将包含已删除元素的返回列表,您可以对其进行索引或迭代。

var temp = $scope.items[1].child.splice(1,1);

console.log(temp[0]);

答案 2 :(得分:0)

您不能通过存储在变量中来删除(var temp = $ scope.items [1] .child.splice(1,1);)。因为' var'创建无法使用delete运算符删除的不可配置属性。