当前位置: 代码迷 >> JavaScript >> 如何在node / iojs中使用ES6计算属性名?
  详细解决方案

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

热度:74   发布时间:2023-06-13 12:30:32.0

我正在尝试编写一个采用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 我正在使用我认为支持ES6的节点0.12.2,即使使用--harmony标志,这个简单的代码也会失败:

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

with SyntaxError: Unexpected token [

使用是唯一的选择吗?

编辑2

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

在当前的Node版本> 4.x中,您可以获得对ES6的一些支持。 状态可以在文档中找到: :

您正在寻找的是什么

计算(动态)属性名称

它现在完全支持。 详细信息可以在这里找到: :

用法:

var obj = {
    // Computed (dynamic) property names
    [ 'prop_' + (() => 42)() ]: 42
};

会产生对象:{prop_42:42}

显示Node和io.js当前都不支持计算属性。 数据位于 > 。

现在可以在iojs v3.0中使用它

变更日志

  相关解决方案