2013-01-15 12 views
6

私は以下のようなツリーオブジェクトを持っています、空であればアイテム配列プロパティを削除しようとしています。私はこれを行うための最善のアプローチについてはわかりませんか?入れ子になったjavascriptオブジェクトからプロパティを削除するにはどうすればよいですか?

私はキーをループすることを考えています。プロパティを確認してから、delete myJSONObject[prop]を使用して削除してください...すべての思考/アイデアは大歓迎ですか?

[{ 
    text: "TreeRoot", 
    items: [{ 
     text: "Subgroup1", 
     items: [] 
    }, { 
     text: "Subgroup2", 
     items: [] 
    }, { 
     text: "Subgroup3", 
     items: [], 
     items: [{ 
      text: "subgroup5", 
      items: [{ 
       text: "subgroup6", 
       items: [{ 
        text: "subgroup7", 
        items: [{ 
         text: "subgroup8", 
         items: [] 
        }] 
       }] 
      }] 
     }] 
    }] 
}] 
+0

を私はBUだろうこのオブジェクトを変更しようとするのではなく、新しいオブジェクトを作成します。 –

+0

ねえ、あなたはまだこれを解決しましたか? – Gideon

+0

http://stackoverflow.com/questions/9446426/how-do-you-recursively-remove-nested-objects-that-c​​ontain-an-empty-array – J4S0Nc

答えて

1

あなたが各ステップでitemsアレイとリターンを除去、または再帰的にアレイの各個別のオブジェクトを処理するいずれかの再帰アルゴリズムを有することができます。

私はまた、サーバー側でこれを実行しようとします。それは、複雑さ、メモリ、および処理時間を大幅に節約します。通常、JSONでエンコードされた文字列から空の配列を「除外する」方法があります。

1

これは(ES5)仕事をする必要があります。

ES6で同じ
function removeEmpty(obj) { 
    Object.keys(obj).forEach(function(key) { 
    (key === 'items' && obj[key].length === 0) && delete obj[key] || 
    (obj[key] && typeof obj[key] === 'object') && removeEmpty(obj[key]) 
    }); 
    return obj; 
}; 

JSBIN

const removeEmpty = (obj) => { 
    Object.keys(obj).forEach(key => 
    (key === 'items' && obj[key].length === 0) && delete obj[key] || 
    (obj[key] && typeof obj[key] === 'object') && removeEmpty(obj[key]) 
); 
    return obj; 
}; 

JSBIN

関連する問題