1

任何想法如何使JSON-keys 可用于小写大写驼峰PerlCase连字符。我们有类似这样的对象表示法,它是用 camelCase 声明的:

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

但是,如果用户使用连字符或类似符号声明默认值会怎样:

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

那么如何使用一键访问它们。

例如,jQuery使用连字符和 camelCase来输入$.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 回答