创建带有动态键的对象

首先,我使用恭喜恭喜进行一些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中分配字符串作为键的最佳方法是什么?

444143 次浏览

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

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

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

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

注意: 浏览器相容性仍然需要一个转译器。

使用巴别塔谷歌的traceur,可以实现今天使用这个语法


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

要使用"dynamic"键,你必须使用<强>括号< / >强:

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