Javascript 使用动态关键点创建对象

Javascript 使用动态关键点创建对象,javascript,object,Javascript,Object,首先,我使用Node.js进行一些DOM访问和解析。好时光 情况如下: 我有一个创建对象所需的函数。该对象对其键和值使用变量,然后返回单个对象。例如: stuff = function (thing, callback) { var inputs = $('div.quantity > input').map(function(){ var key = this.attr('name') , value = this.attr('value');

首先,我使用Node.js进行一些DOM访问和解析。好时光

情况如下:

我有一个创建对象所需的函数。该对象对其键和值使用变量,然后返回单个对象。例如:

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中将字符串指定为键的最佳方法是什么?

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

var o = {};
o[key] = value;
return o;
没有快捷方式(编辑:现在有一个,使用ES6,请参见另一个答案)。

在新的for JavaScript(以前称为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);
}
注意:仍然需要一台transpiler

使用或,可以


在早期的JavaScript规范(ES5及以下版本)中,对象文本中的键总是被逐字解释为字符串

要使用“动态”键,必须使用:

就你而言:

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

很棒的编辑。现在,如果ES6能够正式发布,我们可能有机会实现世界和平如果您愿意使用像Babel这样的transpiler,现在就可以使用计算属性键。示例:关于计算关键点的伟大更新。这就是我这些天在寻找的。我只是想知道你是怎么知道这个“魔法”的。阅读(这么长)ES2015规范文档?对于计算密钥,我在使用gulp minify任务时遇到语法错误。有人面对这个问题吗?还有什么解决方案吗?这也适用于嵌套对象吗?假设我有一个嵌套对象,我可以使用var obj={[dynamic key][dynamic key]=someValue}我想在es6中,你现在可以这样做了:var propname='thing'{[propname]:5}->{thing:5}更多信息请参见:你可以通过:myObj['key'获得动态对象的密钥
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);
}