是否可以使用javascript标记的模板字符串来插入数组值?

时间:2016-11-22 15:14:22

标签: javascript arrays templates ecmascript-6

假设有一个像这样的对象table(表示数据库表结构):

table = { name: "Some table", code: "SOME_TABLE", 
  columns: [
    { name : "Identifier", code: "ID", typ: "number" },
    { name : "Description", code: "DESCR", typ: "varchar2", length: 255 },
  ]
}

是否有一种模式如何编写替换函数,允许在标记模板文字中插入table.columns数组?

这样的东西
function sqlCreate ( strings, ...values ) { 
   ... do something very smart ...
}

并使用它:

sqlCreate`create table ${table.code} ( ...something...${table.columns}...inner template...${'.code'} ${'.typ'}...end of inner template )`

其中${'.code'}${'.type'}会以某种方式引用table.column数组中对象的属性。

我试图搞清楚,但它似乎没有多大意义,而应该有一个专门的生成器功能,它会做正确的事情。

您是否意识到任何成功尝试解决此问题的纯模板解决方案"?

1 个答案:

答案 0 :(得分:1)

您需要一些方法来分隔内部模板。您可以创建自己的语法来指示它的开始和结束位置,或者您可以使用已存在的语法 - 您可以在${}内部使用内部模板字符串。

对于像您的示例一样简单的事情,您甚至不需要自定义标记功能:

`create table ${table.code} (${table.columns.map(col =>`${col.code} ${col.typ}`).join(', ')})`

注意:因为模板字符串中的${}总是立即被评估,所以您必须在某些回调函数代码中嵌入内部模板以延迟评估。或者你必须采用“模板引擎”的方式。