如何将JSON字段值替换至短信模板的对应变量中?
实现短信模板变量替换的完整方案
嘿,这个需求很常见,我给你补全你已经开始写的循环实现,再提供几个更健壮、更灵活的方案,供你参考:
方案一:补全你初始的循环思路
这是最贴合你现有代码的实现,逻辑简单直接:
const eventVariables = ['customerName','date','amount']; const info = { 'customerName':'Ashish Maity', 'date': '14-04-18', 'amount':'500' }; let smsBody = 'Dear customerName, we have received Rs.amount on date'; // 补全你的for循环 for(let i=0; i<eventVariables.length; i++) { const currentVar = eventVariables[i]; // 将模板中的变量名替换为info对象对应的属性值 smsBody = smsBody.replace(currentVar, info[currentVar]); } console.log(smsBody); // 输出结果:Dear Ashish Maity, we have received Rs.500 on 14-04-18
这个方法的好处是完全贴合你一开始的思路,容易理解和维护,适合变量数量不多的场景。
方案二:正则匹配替换(避免部分匹配问题)
如果模板里有可能出现和变量名类似的字符串(比如customerName123),上面的简单替换会误匹配。用正则可以确保只替换完全匹配的变量名,还能支持同一个变量多次出现的情况:
const eventVariables = ['customerName','date','amount']; const info = { 'customerName':'Ashish Maity', 'date': '14-04-18', 'amount':'500' }; let smsBody = 'Dear customerName, we have received Rs.amount on date. customerName thanks you!'; eventVariables.forEach(variable => { // 创建全局匹配的正则,确保替换所有出现的变量 const matchRegex = new RegExp(variable, 'g'); smsBody = smsBody.replace(matchRegex, info[variable]); }); console.log(smsBody); // 输出结果:Dear Ashish Maity, we have received Rs.500 on 14-04-18. Ashish Maity thanks you!
方案三:无需维护变量数组的简洁写法
如果info对象的键刚好完全对应模板里的所有变量,其实可以不用维护eventVariables数组,直接遍历info的属性来完成替换,减少重复维护的工作量:
const info = { 'customerName':'Ashish Maity', 'date': '14-04-18', 'amount':'500' }; let smsBody = 'Dear customerName, we have received Rs.amount on date'; // 遍历info的所有键,自动替换模板中的对应变量 Object.keys(info).forEach(key => { smsBody = smsBody.replace(new RegExp(key, 'g'), info[key]); }); console.log(smsBody);
这种方法更灵活,后续如果新增变量,只要在info里添加对应的键值对即可,不用修改变量数组。
内容的提问来源于stack exchange,提问作者Ashish Maity
相关产品推荐
相关产品推荐

