3

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;
};

狂気の理由は、オブジェクトを公開できないことです。プライベートのままにしておく必要があり、パブリック メソッドは結果を吐き出す必要があります。

4

2 に答える 2

0

作業コードでフィドルを作成しました。それが役立つことを願っています。

http://jsfiddle.net/RdhJF/2/

var o = {

    map: {
        lat : -33.86749,
        lng : 151.20699,
        zoom : 12
    },

    filters : {
        animals : {
            dogs: {
                myDog : 'fido'
            }
        }
    }
};




function get(obj, namespace) 
{
    var parts = namespace.split('.');

    if(parts.length==0)
        return -1;


    var previousValue = obj;

    for(var i = 0; i < parts.length; i++) 
    {
        if(typeof previousValue[parts[i]] == 'undefined')
            return -1;
        else
            previousValue = previousValue[parts[i]];

    }

    return previousValue;
}

var myValue= get(o,'filters.animals.dogs.myDog');
alert(myValue);
于 2013-07-08T05:22:40.973 に答える