2013-03-08 21 views
1

任何思考如何使JSON -keys可用小写大写驼峰PerlCase连字符。我们一直是这样的对象符号,它宣布与驼峰:请选择通过驼峰访问和连字符

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

但是,什么是如果用户声明连字号或类似的默认值:

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

如何再访问它们只一把钥匙。

jQuery例如使得$.fn.css$.fn.animate访问的按键用连字符和驼峰

是否有已靠近这个?

回答

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" 
); 

并不完美,但打开的任何改进。