2016-07-12 12 views
1

空の配列を含むjsonオブジェクトを動的に削除したい。私はこのリンクsimilar question hereを見つけました。しかし私の場合、それは私のためには機能しません。nest jsonオブジェクトで空の配列を含むオブジェクトを再帰的に削除

私はJSONオブジェクトがあるとします。

{"op":"1","parameters":[{"op":"2-1","parameters":[]},{"op":"2-2","parameters":[1,2]}]} 

私は再帰的にものを行うためのサンプルコードを書いてきました:

function removeEmptyArray(cJSON){ 
    if(!cJSON) 
     return cJSON; 

    for(var i=cJSON.parameters.length-1;i>=0;i--){ 
     if(!(cJSON.parameters[i].parameters instanceof Array)) 
      continue; 
     if(cJSON.parameters[i].parameters.length==0){ 
      cJSON.parameters.splice(i,1); 
     }else{ 
      cJSON.parameters[i] = removeEmptyArray(cJSON.parameters[i]); 
     } 
    } 
    return cJSON; 

} 

期待した結果が、コードが正常に動作し、{"op":"1","parameters":[{"op":"2-2","parameters":[1,2]}]}です。

が、私はこれがobj持っている:

{"op":"1","parameters":[{"op":"2-1","parameters":[{"op":"3-1","parameters":[]}]},{"op":"2-2","parameters":[1,2,3]}]} 

出力は{"op":"1","parameters":[{"op":"2-1","parameters":[]},{"op":"2-2","parameters":[1,2,3]}]}

明らかにそれが動的に "OP" "2-1" であるJSONのOBJを削除しませんです。

どのように純粋なJavaScriptを使用して、エレガントな方法でそれを解決するには?

+0

あなたの構造の可能な深さは何ですか?それは不確定ですか?木のような構造を実装しようとしています – Rouz

+2

[「JSONオブジェクト」のようなものはありません](http://benalman.com/news/2010/03/theres-no-suchthing-as-a-json /) – Andreas

+0

@Rouz深さは不明ですが、無限ではありません。 – Sunson

答えて

3

アルゴリズムは、最初に奥行きを調べ、必要に応じて削除します。breadth firstアルゴリズムを使用できます。

function isNotEmpty(object) { 
 
    if (Array.isArray(object.parameters)) { 
 
     object.parameters = object.parameters.filter(isNotEmpty); 
 
     return object.parameters.length; 
 
    } 
 
    return true; 
 
} 
 

 
var object = { "op": "1", "parameters": [{ "op": "2-1", "parameters": [{ "op": "3-1", "parameters": [] }] }, { "op": "2-2", "parameters": [1, 2, 3] }] }; 
 

 
isNotEmpty(object); 
 
console.log(object);

関連する問題