使用动态键创建对象

发布于 2025-01-11 13:21:07 字数 698 浏览 0 评论 0原文

首先,我使用 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() returns an array of object fyi)

我需要 key 实际上是 this.attr('name ')

考虑到我想要做什么,在 JavaScript 中将字符串指定为键的最佳方法是什么?

First off, I'm using Cheerio for some DOM access and parsing with Node.js.

Here's the situation:

I have a function that I need to create an object. That object uses variables for both its keys and values, and then return that single object. Example:

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

It outputs this:

[ { key: '1' }, { key: '1' } ]

(.map() returns an array of objects fyi)

I need key to actually be the string from this.attr('name').

What's the best way to assign a string as a key in JavaScript, considering what I'm trying to do?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

耀眼的星火 2025-01-18 13:21:07

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

In the new ES2015 standard for JavaScript (formerly called ES6), objects can be created with computed keys: Object Initializer spec.

The syntax is:

var obj = {
  [myKey]: value,
}

If applied to the OP's scenario, it would turn into:

stuff = function (thing, callback) {
  var inputs  = $('div.quantity > input').map(function(){
    return {
      [this.attr('name')]: this.attr('value'),
    };
  }) 

  callback(null, inputs);
}

Note: A transpiler is still required for browser compatiblity.

Using Babel or Google's traceur, it is possible to use this syntax today.


In earlier JavaScript specifications (ES5 and below), the key in an object literal is always interpreted literally, as a string.

To use a "dynamic" key, you have to use bracket notation:

var obj = {};
obj[myKey] = value;

In your case:

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);
}
说好的呢 2025-01-18 13:21:07

您无法使用动态键定义对象文字。这样做:

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

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

You can't define an object literal with a dynamic key. Do this :

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

There's no shortcut (edit: there's one now, with ES6, see the other answer).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文