2016-11-02 26 views
0

我有一個存儲在範圍變量中的JSON對象,比如$ scope.items。如何通過存儲引用來刪除JSON屬性?

$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; 

然而,這並不爲「臨時」不存儲JSON元素(ID 6)的參考工作,將被刪除。

因爲我得到了要動態刪除的對象中的JSON元素的路徑,我不知何故需要存儲引用,並稍後執行刪除操作。或者請爲我提供一個最好的替代方案。謝謝!

+0

我不認爲[它實際上是你的想法](http://perfectionkills.com/understanding-delete/)。 – Bergi

回答

0

既然你需要的路徑是動態的,存儲在變量中的重要路徑元素是這樣的:

var itemNum = 1; 
var childNum = 1; 

您的代碼可以動態地設置使用任何邏輯是必要的這些變量。然後在你的代碼後,當您需要刪除,這樣做:

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

你不需要delete命令在這裏。只需使用splice即可從child[]陣列中刪除該項目。

+0

是的,我想到了這一點,但如果'孩子'有更多的孩子元素並且嵌套深厚,這將如何工作?我將不得不以某種方式循環實現類似以下內容:$ scope.items [1] .child [1] .child [2] .child [0] .splice(2,1); – sharathChandra

0

首先,這是一個對象數組,而不是JSON。

其次,Array.splice()將從數組中刪除一系列項目並將這些項目作爲新數組返回。將項目拼接到陣列外時,Angular應該識別範圍更改並更新DOM,因此不需要delete任何東西。

第三,temp變量將包含已刪除元素的返回列表,您可以對其進行索引或迭代。

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

console.log(temp[0]); 
0

您不能通過存儲變量(如var temp = $ scope.items [1] .child.splice(1,1);)來刪除。由於'var'會創建無法使用刪除操作刪除的不可配置屬性。

相關問題