使用动态键创建对象

JDi*_*522 315 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);
}
Run Code Online (Sandbox Code Playgroud)

它输出这个:

[ { key: '1' }, { key: '1' } ]
Run Code Online (Sandbox Code Playgroud)

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

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

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

Ren*_*non 810

在用于JavaScript 的新ES2015标准(以前称为ES6)中,可以使用计算键创建对象:对象初始化程序规范.

语法是:

var obj = {
  [myKey]: value,
}
Run Code Online (Sandbox Code Playgroud)

如果应用于OP的场景,它将变为:

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

  callback(null, inputs);
}
Run Code Online (Sandbox Code Playgroud)

注意:浏览器兼容性仍然需要转换.

使用BabelGoogle的traceur,今天可以使用此语法.


在早期的JavaScript规范(ES5及更低版本)中,对象文字中的键始终按字面解释为字符串.

要使用"动态"键,必须使用括号表示法:

var obj = {};
obj[myKey] = value;
Run Code Online (Sandbox Code Playgroud)

在你的情况下:

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);
}
Run Code Online (Sandbox Code Playgroud)

  • 很棒的编辑.现在如果ES6可以正式发布,我们可能会有一个世界和平的机会!:) (3认同)

Den*_*ret 40

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

var o = {};
o[key] = value;
return o;
Run Code Online (Sandbox Code Playgroud)

没有捷径(编辑:现在有一个,ES6,见另一个答案).

  • 我想在es6中你现在可以这样做:var propname ='thing'{[propname]:5} - > {thing:5}更多信息请访问:https://developer.mozilla.org/en-US/docs /网络/的JavaScript /参考/运营/ Object_initializer (8认同)