返回信息流题目在http://scriptoj.mangojuice.top/problems/69
-------------------
模版引擎是在前端是非常常用的一种工具。请你完成一个简单的模版引擎的 render 函数,它可以接受模版字符串和一个数据对象作为参数。函数执行返回渲染以后的模版字符串,例如:
const templateStr = `
<ul class="users">
<% users.forEach((user) => { %>
<li class="user-item">
<%= 'My name is ' + user.name %>
</li>
<% }) %>
</ul>
`
const data = {
users: [
{ name: 'Jerry', age: 12 },
{ name: 'Lucy', age: 13 },
{ name: 'Tomy', age: 14 }
]
}
render(templateStr, data)
/*返回结果:
<ul class="users">
<li class="user-item">
My name is Jerry
</li>
<li class="user-item">
My name is Lucy
</li>
<li class="user-item">
My name is Tomy
</li>
</ul>
*/
<% 和 %> 之间可以放置任意的 JavaScript 代码,而 <%= 和 %> 之间执行任意的 JavaScript 表达式并且输出在模版上;传入的 data 可以作为模版引擎执行的上下文进行数据的引用,请你完成 render 函数。
-----------------------------------------------
看了这道题 这个答案没太看懂在说什么 求指导
function render(template, data) {
const evalExpr = /<%=(.+?)%>/g
const expr = /<%([\s\S]+?)%>/g
template = template
.replace(evalExpr, '`); \n __echo( $1 ); \n __echo(`')
.replace(expr, '`); \n $1 \n __echo(`')
template = '__echo(`' + template + '`);'
const script = `
let output = ""
const __echo = (html) => output += html
${template}
return output
`
return new Function(...Object.keys(data), script)(...Object.values(data))
}
这是一条镜像帖。来源:北邮人论坛 / java-script / #4367同步于 2018/10/31
JavaScript机器人发帖
求问 模版引擎的咋实现的。。。
heyzl
2018/10/31镜像同步0 回复
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。