2016-11-02 4 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のプロパティを削除する必要があります。削除する

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

は、しかし、これは「TEMP」(ID 6との)JSON要素の参照が格納されていないと動作しません:

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

はしかし、私はこのような何かをする必要があり。

オブジェクト内のJSON要素のパスが動的に削除されるため、参照を保存して後で削除操作を実行する必要があります。または、そうするための最良の代替案を提案してください。ありがとう!あなたが動的にするパスを必要とするので

+0

私は[実際にあなたがそれがどう考えているか](http://perfectionkills.com/understanding-delete/)とは思わない。 – Bergi

答えて

0

、このような変数で重要なパス要素を格納します。

var itemNum = 1; 
var childNum = 1; 

あなたのコードが動的に必要なロジックを全て使用してこれらの変数を設定することができます。その後、後続のコードで削除する必要がある場合、次の操作を行います。

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

あなたがここにdeleteコマンドは必要ありません。 を使用して、child[]配列からアイテムを削除してください。

+0

はい、私はこれについて考えましたが、「子」が子要素をさらに持ち、深く入れ子になっている場合、これはどのように機能しますか? $ scope.items [1] .child [1] .child [2] .child [0] .splice(2、1);私は何かを達成するために何とかしなければなりません。 – sharathChandra

0

まず、JSONではなくオブジェクトの配列です。

第2に、Array.splice()は、配列から項目の範囲を削除し、それらの項目を新しい配列として返します。配列からアイテムをスプライスするとき、Angularはスコープの変更を認識し、DOMを更新する必要があります。deleteは必要ありません。

第3に、変数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'は、削除演算子では削除できない設定不可能なプロパティを作成するためです。

関連する問題