我正在尝试编写一个采用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,这种语法仍然失败,所以我一定做错了什么?
答案 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)
Now can use it in iojs v3.0
Changelog https://github.com/nodejs/io.js/blob/master/CHANGELOG.md#user-content-notable-changes