2013-03-16 15 views
33

から要素を削除します。私は次のようになりますJSON配列持つJSONオブジェクト

{ 
    "id": 1, 
    "children": [ 
    { 
     "id": 2, 
     "children": { 
      "id": 3, 
      "children": { 
       "id": 4, 
       "children": "" 
      } 
     } 
    }, 
    { 
     "id": 2, 
     "children": { 
      "id": 3, 
      "children": { 
       "id": 4, 
       "children": "" 
      } 
     } 
    }, 
    { 
     "id": 2, 
     "children": { 
      "id": 3, 
      "children": { 
       "id": 4, 
       "children": "" 
      } 
     } 
    }, 
    { 
     "id": 2, 
     "children": { 
      "id": 3, 
      "children": { 
       "id": 4, 
       "children": "" 
      } 
     } 
    }, 
    { 
     "id": 2, 
     "children": { 
      "id": 3, 
      "children": { 
       "id": 4, 
       "children": "" 
      } 
     } 
    }, 
    { 
     "id": 2, 
     "children": { 
      "id": 3, 
      "children": { 
       "id": 4, 
       "children": "" 
      } 
     } 
    }, 
    { 
     "id": 2, 
     "children": { 
      "id": 3, 
      "children": { 
       "id": 4, 
       "children": "" 
      } 
     } 
    }] 
} 

を私は「子供」の空を持っている要素を削除機能を持っていると思います。どうしたらいいですか?あなたは再帰的なアプローチを使用することができ、空の子供のためのすべての要素をテストするには

for (var key in json_obj) { 
    if (json_obj.hasOwnProperty(key)) { 
     // do something with `key' 
    } 
} 

:私は答えを求めていない午前、だけの提案

+0

慎重に:これらの '='兆候は、この冗長な質問で不正なJSON – rjz

+2

@magritte停止を示唆。彼は提案を求めていると述べた。答え: –

+0

@rjz、はいそれらは=そうでなければなりません:... –

答えて

51

オブジェクトのキーを反復処理するには、for .. inループを使用します。すべての要素を反復処理し、子を再帰的にテストします。

var someObj = { 
    "one": 123, 
    "two": 345 
}; 
var key = "one"; 
delete someObj[key]; 
console.log(someObj); // prints { "two": 345 } 

ドキュメント:

オブジェクトのプロパティを削除

deleteキーワードを使用して行うことができ

+9

+1 ...私はコーディングしていますJavascriptを何年も使っていて、[delete](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/delete)演算子が存在することさえ知りませんでしたか? – Emissary

+1

私は子供が配列で保持されているので、彼は削除よりむしろsplice()メソッドを使うべきだと思いますか? – magritte

+0

@magritte彼は配列とオブジェクトの両方を聞きました。私はいくつかの説明を待っていますが、配列がある場合、要素を削除するために 'splice'を使用したり、[' filter'](https://developer.mozilla.org/en-US/docs/JavaScript/)を使用することができますReference/Global_Objects/Array/filter)を使用して、繰り返し処理して削除します。 – Lekensteyn

1

JSfiddle

function deleteEmpty(obj){ 
     for(var k in obj) 
     if(k == "children"){ 
      if(obj[k]){ 
        deleteEmpty(obj[k]); 
      }else{ 
        delete obj.children; 
       } 
     } 
    } 

for(var i=0; i< a.children.length; i++){ 
deleteEmpty(a.children[i]) 
} 
関連する問題