使用动态键创建对象
首先,我使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在新的 JavaScript ES2015 标准(以前称为 ES6)中,可以使用 创建对象计算键:对象初始化器规范。
语法是:
如果应用于OP的场景,它将变成:
注意: 浏览器兼容性。
使用 Babel 或 Google 的 Traceur,它是可能使用今天的语法。
在早期的 JavaScript 规范(ES5 及更低版本)中,对象字面量中的键始终按字面解释为字符串。
要使用“动态”密钥,您必须使用括号符号:
在您的情况下:
In the new ES2015 standard for JavaScript (formerly called ES6), objects can be created with computed keys: Object Initializer spec.
The syntax is:
If applied to the OP's scenario, it would turn into:
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:
In your case:
您无法使用动态键定义对象文字。这样做:
没有捷径(编辑:现在有一个,使用 ES6,请参阅另一个答案)。
You can't define an object literal with a dynamic key. Do this :
There's no shortcut (edit: there's one now, with ES6, see the other answer).