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,这种语法仍然失败,所以我一定做错了什么?
在当前的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}