1

JSON-keys をlowercaseUPPERCASEcamelCasePerlCase、およびhyphensで使用できるようにする方法についての考え。キャメルケースで宣言されたこのオブジェクト表記のようなものがあります。

var options = {
    "fooBar": "foo bar"
};

しかし、ユーザーがハイフンなどでデフォルトを宣言した場合はどうなるでしょうか:

var options = {
    "foo-bar": "foo bar"
};

たった1つのキーでそれらにアクセスする方法。

たとえばjQueryは、ハイフンとキャメルケースでキーを入力し$.fn.cssてアクセスできるようにします$.fn.animate

これに対するアプローチはすでにありますか?

4

1 に答える 1

0

私は何かを作りましたが、完璧ではありませんが、これまでのところうまくいきます:

(function(){
    var methods =  {
        toLowerCase: function(str){
            return str.toLowerCase();
        },

        toUpperCase: function(str){
            return str.toUpperCase();
        },

        toCamelCase: function(str){
            return str.replace(/(\-[a-z])/g, function($1){
                return $1.toUpperCase().replace("-", "");
            });
        },

        toDashCase: function(str){
            return str.replace(/([A-Z])/g, function($1){
                return "-"+$1.toLowerCase();
            });
        }
    };

    Object.prototype.getItem = function(key) {
        var opt = this[key];
        if(opt) return opt;
        for(var method in methods) {
            if(methods.hasOwnProperty(method)) {
                opt = this[ methods[method](key) ];
                if(opt) return opt;
            }
        }
    };
}());

私は使用Object.prototype法を非常に簡単にするために使用しました:

var options = {
    "foo": "foo",
    "BAR": "BAR",
    "fooBar": "fooBar",
    "bar-foo": "bar-foo"
};

console.log(
    options.getItem("foo"), // "foo"
    options.getItem("Foo"), // "foo"
    options.getItem("FOO"), // "foo"

    options.getItem("bar"), // "BAR"
    options.getItem("bar"), // "BAR"
    options.getItem("BAR"), // "BAR"

    options.getItem("fooBar"), // "fooBar"
    options.getItem("foo-bar"), // "fooBar"

    options.getItem("barFoo"), // "bar-foo"
    options.getItem("bar-foo") // "bar-foo"
);

完璧ではありませんが、改善の余地があります。

于 2013-03-09T12:30:05.310 に答える