使用动态键创建对象

时间:2013-11-07 14:02:39

标签: javascript object

首先,我使用Cheerio进行DOM访问并使用Node.js进行解析。好时光。

接下来的情况:

我有一个我需要创建一个对象的函数。该对象使用其键和值的变量,然后返回该单个对象。例如:

stuff = function (thing, callback) {
  var inputs  = $('div.quantity > input').map(function(){
    var key   = this.attr('name')
     ,  value = this.attr('value');

     return { key : value }
  }) 

  callback(null, inputs);
}

输出:

[ { key: '1' }, { key: '1' } ]

.map()返回一个对象数组fyi)

我需要key实际上是来自this.attr('name')的字符串。

考虑到我正在尝试做什么,最好的方法是将字符串指定为Javascript中的键?

2 个答案:

答案 0 :(得分:742)

在用于JavaScript的新ES2015 standard(以前称为ES6)中,可以使用计算密钥创建对象:Object Initializer spec

语法为:

var obj = {
  [myKey]: value,
}

如果应用于OP的情况,它将变为:

stuff = function (thing, callback) {
  var inputs  = $('div.quantity > input').map(function(){
    return {
      [this.attr('name')]: this.attr('value'),
    };
  }) 

  callback(null, inputs);
}

注意: browser compatiblity仍需要转录程序。

使用BabelGoogle's traceur,可以use this syntax today


在早期的JavaScript规范(ES5及以下版本)中,对象文字中的键总是按字面解释为字符串。

要使用“动态”键,您必须使用bracket notation

var obj = {};
obj[myKey] = value;

在你的情况下:

stuff = function (thing, callback) {
  var inputs  = $('div.quantity > input').map(function(){
    var key   = this.attr('name')
     ,  value = this.attr('value')
     ,  ret   = {};

     ret[key] = value;
     return ret;
  }) 

  callback(null, inputs);
}

答案 1 :(得分:32)

您无法使用动态键定义对象文字。这样做:

var o = {};
o[key] = value;
return o;

没有快捷方式(编辑:现在有一个,使用ES6,请参阅另一个答案)。