题目要求
提供一个摸板字符串和一组数据,返回一个渲染完毕的字符串。
方法一:用解析字符串,提取关键字,用关键字去data中取数据。
let data:object = {
name:'二狗',
sex:'男'
}
let str: string = '姓名:${name},性别:${sex},年龄:${age}'
function strParse(str: string, data: object) {
let start: number = str.indexOf('${')
let end: number = str.indexOf('}')
let arg = str.slice(start + 2, end)
if(data[arg]===undefined){
throw `${arg} is not defined!`
}
str = str.replace('${' + arg + '}', data[arg])
if (str.indexOf('${') > -1) {
return strParse(str, data)
} else {
return str
}
}
console.log(strParse(str, data))
方法二:循环data生成关键字,然后根据关键字去替换str中的对应字符串
function strParse2(str: string, data: object) {
for(let key in data){
str = str.replace('${'+key+'}',data[key])
}
findUndefinedData(str)
return str
}
function findUndefinedData (str:string,startFlag:number=0,endFlag:number=0) {
let start: number = str.indexOf('${',startFlag)
let end: number = str.indexOf('}',endFlag)
if(start>-1||end>-1){
let keyStr = str.slice(start+2,end)
console.error(`${keyStr} is not defined!`)
return findUndefinedData(str,start+1,end+1)
} else {
return false
}
}
console.log(strParse2(str, data))
第二问要求是遇到模板中有,但是data中没有的数据需要给出异常提示。 此时第一种方法就比较好处理了,判断根据模板关键字取出的数据是不是undefined就行了。第二种要专门去写个方法去搜索未被替换的字符,然后抛出异常。