用动态键创建对象
首先,我使用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,看到另一个答案)。