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

时间:2015-07-19 05:11:17

标签: javascript node.js csv ecmascript-6 sequelize.js

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

例如,带有以下内容的CSV

Title(STRING), Description(TEXT)
Title Example, Description Example
...

Sequelize docs指定,例如:

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 Computed Property Names?我使用了我认为支持ES6的节点0.12.2,即使使用--harmony标志,这个简单的代码也会失败:

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

SyntaxError: Unexpected token [

io.js是唯一真正选择的选项吗?

编辑2

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

3 个答案:

答案 0 :(得分:6)

在当前的节点版本中> 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}

答案 1 :(得分:2)

ECMAScript 6 compatibility table表明Node和io.js目前都不支持计算属性。数据位于object literal extensions>下。 computed properties

答案 2 :(得分:1)