使用动态键创建对象

IT技术 javascript object
2021-01-10 09:33:00

首先,我使用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 中将字符串分配为键的最佳方法是什么?

2个回答

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);
}
如果您愿意使用像 Babel 这样的转译器,您现在可以使用 Computed Property Keys。示例:babeljs.io/repl/...
2021-03-12 09:33:00
这是否也适用于嵌套对象假设我有一个嵌套对象我可以使用 var obj ={ [dynamic key][dynamic key]=someValue }
2021-03-16 09:33:00
很棒的编辑。现在,如果 ES6 能够正式发布,我们可能会为世界和平而努力!:)
2021-03-18 09:33:00
关于计算键的重大更新这就是我这些天正在寻找的东西。我只是想知道你是怎么知道这个“魔法”的。阅读(这么长)ES2015 规范文档?
2021-03-25 09:33:00
对于计算键,使用 gulp minify 任务时出现语法错误。任何身体都面临这个?和任何解决方案?
2021-04-07 09:33:00

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

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

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

我认为在 es6 中你现在可以这样做: var propname = 'thing' {[propname]:5} -> {thing:5} 更多信息请参见:developer.mozilla.org/en-US/docs/Web/JavaScript /参考/…
2021-04-01 09:33:00