qappleh / Interview

我是追梦赤子心,公众号「深圳湾码农」的作者,某上市集团公司高级前端开发,深耕前端领域多年,每天攻破一道题,带你从0到1系统构建web全栈完整的知识体系!
https://github.com/qappleh/Interview
1.14k stars 95 forks source link

Day402: 实现一个render(str,parameter)方法,将str中的占位符用parameter填充?(腾讯) #405

Open qappleh opened 2 years ago

qappleh commented 2 years ago
测试用例:
const str = "下周一{{people1}}和{{people2}}去游泳"
render(str,{
    people1:'小明',
    people2:'小红'
})
square-li commented 2 years ago

最简单的方法就是 string.replaceAll()了吧

const stringReplace = (template: string, obj: { [k: string]: string }) => {
    const keys = Object.keys(obj)
    keys.forEach(k => {
        template = template.replaceAll(`{{${k}}}`, obj[k])
    })
    return template
}

也可以考虑用template来做

const stringReplace2 = (template: string, obj: { [k: string]: string }) => {
    return eval('`' +  template.replaceAll("{{", "${obj['").replaceAll("}}", "']}") + '`')
}

需要考虑的一点就是parameter会不会有一些奇怪的格式和符号, 最基本的应该没问题。 性能上好像是template literal会快一点。