一、写在前面
var a = {
b: 123,
c: '456',
e: '789',
}
var str=`a{a.b}aa{a.c}aa {a.d}aaaa`;
// => 'a123aa456aa {a.d}aaaa'
二、手写
如上述所示,此时如果a
对象中存在某一个属性,则直接取出值进行渲染,如果对象中不存在某一个属性,则直接进行渲染。
具体手写代码如下所示
function func(str, obj) {
let res = ''
let start = 0
let flag = false
let length = str.length
for (let i = 0; i < length; i++) {
if (str[i] === '{') {
start = i + 1
flag = true
continue
}
if (!flag) {
res += str[i]
} else {
if (str[i] === '}') {
let curStr = str.slice(start, i)
let r = match(curStr, obj)
res += r
flag = false
}
}
}
return res
}
function match(str, obj) {
let curArr = str.split('.').splice(1)
let o = obj
while (curArr.length) {
let shiftOne = curArr.shift()
if (!o[shiftOne]) {
return `{${str}}`
} else {
o = o[shiftOne]
}
}
return o
}
var a = {
b: 123,
c: '456',
e: '789',
}
var str = `a{a.b}aa{a.c}aa {a.d}aaaa`;
console.log(func(str, a))