2012-04-16 9 views
2

複雑なjsonオブジェクトを再帰的に検索し、 "_"で始まるキーに関連付けられたオブジェクトを削除する必要があります。JSONを再帰的に検索して特定のサブオブジェクトを削除する

はこれまでのところ、私が持っている:

sanitize: function(json){ 
    for(var i in json){ 
     if(json[i]){ 
      if(i.substring(0,1) == "_") 
       delete json[i]; 
      else 
       this.sanitize(json[i]); 
     } 
    } 
    console.log(json); 
    return json; 
} 

私は最大コールスタックを超えています。

答えて

1

独自の配列を使用して、サブオブジェクトが循環参照でないことを確認し、オブジェクトがオブジェクトであることを確認してください。

function sanitize(json) { 
    var stack = []; 
    var done = []; 

    do { 
     for(var x in json) { 
      if(x.charAt(0) === '_') { 
       delete json[x]; 
      } else if(done.indexOf(json[x]) === -1 && typeof json[x] === 'object') { 
       stack.push(json[x]); 
       done.push(json[x]); 
      } 
     } 
    } while(json = stack.pop()); 
} 
+0

何か不足していますか?この関数の後にjsonを返すと、その変数は定義されていません。 –

+0

'stack'変数は何をしていますか? – Jeff

+0

@ gonzoc0ding:参照渡し、何も返さない。オブジェクトを渡すだけで、オブジェクトは所定の場所で消毒されます。 – Ryan

関連する問題