使用动态键创建对象[重复]

问题描述 投票:0回答:2

首先,我使用 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()
返回对象数组仅供参考)

我需要

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

考虑到我想要做什么,在 JavaScript 中将字符串指定为键的最佳方法是什么?

javascript object
2个回答
1185
投票

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

语法是:

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

注意: 仍需要转译器来实现 浏览器兼容性

使用 BabelGoogle 的 Traceur,现在可以 使用此语法


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

要使用“动态”键,您必须使用括号符号

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

73
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.