###実現したいこと
以下のオブジェクトですが、最深部のtrue|false
をすべてnull
に置換する方法を教えて頂けないでしょうか。
###オブジェクト
json
1var response = { 2 "search_pages": {"posts":true,"comments":false,"users":false}, 3 "search_filter": { 4 "posts": { 5 "dog": { 6 "a": false, 7 "n": true, 8 } 9 }, 10 "comments": { 11 "cat": { 12 "c": true, 13 } 14 }, 15 "users": { 16 "giraffe": { 17 "a": false, 18 "r": true, 19 "v": false, 20 }, 21 "frog": { 22 "r": false, 23 "t": false, 24 }, 25 }, 26 } 27};
###発生している問題
次の該当のソースコードで、こうなります…
一番上の階層にしか置換が適用されず、もっと深いキー(dog
やa
やr
など)まで再帰が届いてくれません。
{ "search_pages": { "posts": null, "comments": null, "users": null }, "search_filter": { "posts": null, "comments": null, "users": null } }
###該当のソースコード
こちらでその問題となります。
js
1var result = replaceNull(response); 2console.log(result); 3function replaceNull(obj) { 4 var result = {}; 5 for (var key in obj){ 6 let obj2 = {}; 7 // null にして再帰 8 if (typeof obj[key] == "object") { 9 $.each(obj[key], function(key,state){ 10 obj2[key] = null; 11 }); 12 replaceNull(obj2); 13 } 14 result[key] = obj2; 15 } 16 return result; 17}
###試したこと
コンソールを出してオブジェクトの判定と再起のタイミングを変えて次のようなものを書いてみましたが、これでも実現できません。いまいち構造を理解しきれていない感じです。宜しくお願い致します。
js
1function replaceNull(obj) { 2 var result = {}; 3 for (var key in obj){ 4 let obj2 = {}; 5 // null にして再帰 6 if (typeof obj[key] == "object") { 7 $.each(obj[key], function(key,val){ 8 if (typeof val == "object") { 9 replaceNull(obj2) ; 10 }else{ 11 obj2[key] = null; 12 } 13 }); 14 console.log('obj2 =',obj2) 15 } 16 result[key] = obj2; 17 } 18 return result; 19}
回答2件
あなたの回答
tips
プレビュー