用动态键创建对象

首先,我使用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,考虑我在做什么?

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

注意: 浏览器兼容性仍然需要转译器 。

使用Babel或Google的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); } 

您不能用动态键定义对象文字。 做这个 :

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

没有捷径(编辑:现在有一个,用ES6,看到另一个答案)。