【问题标题】:Creating object with dynamic keys [duplicate]使用动态键创建对象 [重复]
【发布时间】:2013-11-19 05:09:39
【问题描述】:

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

【问题讨论】:

  • 您可以通过 myObj['key'] 获取 动态对象的密钥

标签: javascript object


【解决方案1】:

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

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

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

【讨论】:

【解决方案2】:

在 JavaScript(以前称为 ES6)的新 ES2015 standard 中,可以使用计算键创建对象:Object Initializer spec。

语法是:

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

注意:browser compatiblity 仍需要转译器。

使用Babel或Google's traceur,可以use this syntax today。


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

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

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

【讨论】:

  • 伟大的编辑。现在,如果 ES6 可以正式发布,我们可能会为世界和平出一份力! :)
  • 如果你愿意使用像 Babel 这样的转译器,你现在可以使用 Computed Property Keys。示例:babeljs.io/repl/…
  • 关于计算密钥的重大更新。这就是我这些天在寻找的东西。我只是想知道你是怎么知道这个“魔法”的。阅读(这么长的)ES2015 规范文档?
  • 对于计算键,我在使用 gulp minify 任务时遇到语法错误。有没有人遇到过这种情况?有什么解决办法吗?
  • 这是否也适用于嵌套对象假设我有一个嵌套对象我可以使用 var obj ={ [dynamic key][dynamic key]=someValue }
猜你喜欢
  • 2015-09-08
  • 2019-07-01
  • 1970-01-01
  • 2020-10-11
  • 2023-02-07
  • 2021-07-30
  • 1970-01-01
  • 2020-03-01
相关资源
最近更新 更多