JavaScript オブジェクトの名前空間と値を検索してキーを返すことができる関数を作成しようとしています。
このデータをイメージしてください:
var o = {
map: {
lat : -33.86749,
lng : 151.20699,
zoom : 12
},
filters : {
animals : {
dogs: {
myDog : 'fido'
}
}
}
};
function get(namespace, key){
//TODO
}
get('filters.animals.dogs', 'myDog')
名前空間の深さに関係なく、これを動的に行う関数をどのように構築しますか?
この関数は多少似ていますが、元のオブジェクトを変更するだけで、もちろん必要ありません。
var get = function(obj, namespace, key, value) {
var parts = namespace.split('.');
for(var i = 0; i < parts.length; i++) {
if(typeof obj[parts[i]] == 'undefined'){
obj[parts[i]] = {};
}
obj = obj[parts[i]];
}
return obj[key] = value;
};
狂気の理由は、オブジェクトを公開できないことです。プライベートのままにしておく必要があり、パブリック メソッドは結果を吐き出す必要があります。