给定一个模板和一个对象,利用对象中的数据渲染模板,并返回最终结果。
let obj = {
group: {
name: "国际",
jobs: ["前端", "后端", "产品"]
},
company: '云浪'
}
let str = '你好,我们公司是{{company}},我们属于{{group.name}}业务线,我们在招聘各种方向的人才,包括{{group.jobs[0]}}、{{group["jobs"][1]}}等。';
个人解决方案:
let str = '你好,我们公司是{{company}},我们属于{{group.name}}业务线,我们在招聘各种方向的人才,包括{{group.jobs[0]}}、{{group["jobs"][1]}}等。';
// 转换group.jobs[0]为group.jobs.0的形式
// 转行group["jobs"][1]为group.jobs.1的形式
str = str.replace(/\["?/g,'.').replace(/\"?]/g,'')
const result = str.replace(/\{\{(\w+)\}\}/, function (substring, key) {
console.log(substring, key); // {{company}} company
return obj[key];
}).replace(/\{\{(\w+(\.\w+)+)\}\}/g, function (substring, key) {
console.log(substring, key);
// {{group.name}} group.name
// {{group.jobs.0}} group.jobs.0
const keys = key.split('.');
let res = obj;
for(let k of keys){
res = res[k]
}
return res;
});
console.log(result);
借助lodash.get
应该也可以