如何在node/iojs中使用ES6计算属性名?

waf*_*ffl 2 javascript csv node.js sequelize.js ecmascript-6

我正在尝试编写一个采用CSV的工具,并根据标题行动态生成定义?

例如,CSV包含:

Title(STRING), Description(TEXT)
Title Example, Description Example
...
Run Code Online (Sandbox Code Playgroud)

Sequelize 文档指定,例如:

var Entry = sequelize.define('Entry', {
  title: Sequelize.STRING,
  description: Sequelize.TEXT
})
Run Code Online (Sandbox Code Playgroud)

我如何编写此定义以便可以动态定义 - 以便可以根据CSV标题行动态生成title数据类型Sequelize.STRING


编辑

好吧,经过一些研究,我认为显而易见的问题是"如何在对象文字中使用变量名作为动态键名",并且已经多次回答.

因此,以括号表示法编写它很简单,因此:

var definitionObj = {}
definitionObj['title'] = sequelize.STRING;
definitionObj['description'] = sequelize.TEXT;

var Entry = sequelize.define('Entry', definitionObj);
Run Code Online (Sandbox Code Playgroud)

但是,我现在的问题是如何在节点中使用ES6 计算属性名称?我正在使用节点0.12.2,我认为它支持ES6,即使有了--harmony标志,这个简单的代码也会失败:

var Entry = sequelize.define('Entry', {
  ['title']: Sequelize.STRING,
  ['description']: Sequelize.TEXT
});
Run Code Online (Sandbox Code Playgroud)

SyntaxError: Unexpected token [

使用io.js是唯一的选择吗?

编辑2

实际上,即使使用iojs,这种语法仍然失败,所以我一定做错了什么?

Ale*_*lak 6

在当前的Node版本> 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
};
Run Code Online (Sandbox Code Playgroud)

会产生对象:{prop_42:42}