BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java-script / #4367同步于 2018/10/31
JavaScript机器人发帖

求问 模版引擎的咋实现的。。。

heyzl
2018/10/31镜像同步0 回复
题目在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)) }
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。