我正在尝试编写一个使用CSV并基于标题行动态生成定义的工具?
例如,CSV具有:
Title(STRING), Description(TEXT)
Title Example, Description Example
...例如,Sequelize 文档指定:
var Entry = sequelize.define('Entry', {
title: Sequelize.STRING,
description: Sequelize.TEXT
})我如何编写这个定义,以便动态地定义它--以便能够基于CSV标题行动态生成title和数据类型Sequelize.STRING?
编辑
好的,经过一些研究,我认为最明显的问题是“如何使用变量名作为对象文字中的动态键名”,并且已经回答了好几次。
因此,用括号表示法写这个很简单,因此:
var definitionObj = {}
definitionObj['title'] = sequelize.STRING;
definitionObj['description'] = sequelize.TEXT;
var Entry = sequelize.define('Entry', definitionObj);然而,现在我的问题是,如何在节点中使用ES6 计算属性名 ?我使用的是节点0.12.2,我认为它支持ES6,即使使用--harmony标志,这个简单的代码也会失败:
var Entry = sequelize.define('Entry', {
['title']: Sequelize.STRING,
['description']: Sequelize.TEXT
});用SyntaxError: Unexpected token [
是真正使用io.js的唯一选择
编辑2
实际上,即使使用iojs,这个语法仍然失败,所以我肯定做错了什么?
发布于 2015-07-20 01:54:16
ECMAScript 6兼容性表显示,Node和io.js目前都不支持计算属性。数据在对象文字扩展 > 计算性质下。
发布于 2016-01-28 10:04:56
在当前的Node release > 4.x中,您有一些对ES6的支持。状态可以在文档中找到:https://nodejs.org/en/docs/es6/
你要找的东西叫做
计算(动态)属性名称
现在它得到了充分的支持。详细信息可以在这里找到:https://github.com/lukehoban/es6features#enhanced-object-literals
用法:
var obj = {
// Computed (dynamic) property names
[ 'prop_' + (() => 42)() ]: 42
};将产生对象:{prop_42: 42}
发布于 2015-08-06 13:52:30
现在可以在iojs v3.0中使用它。
Changelog https://github.com/nodejs/io.js/blob/master/CHANGELOG.md#user-content-notable-changes
https://stackoverflow.com/questions/31498206
复制相似问题