提问人:lulufv 提问时间:2/27/2023 最后编辑:lulufv 更新时间:2/27/2023 访问量:31
如何使用变量作为模式并替换 replaceAll() 方法?
How can I use variables as the pattern and the replacement of replaceAll() method?
问:
我有一个表单,一旦点击提交按钮,就会生成一个对象。每个键值对都是按照以下模式构建的:inputId: inputValue,因此对象如下所示:
let inputsObj = {
templateList: 'blank',
agentsName: 'John',
agentsPhone: '000-000-0000'
}
然后,我需要替换字符串中 inputIds 的所有实例。因此,字符串如下所示:
let template = "My name is agentsName and this is my phone number: agentsPhone"
我需要让它看起来像这样:
"My name is John and this is my phone number: 000-000-0000"
输入字段的数量是未知的(因为它取决于其他因素),并且它们并不总是相同的。因此,我正在尝试创建一个函数来动态替换这些占位符。我正在尝试遍历输入Obj,然后将每个键替换为其值:
let finalTemplate
const getReplacements = () => {
for (let replacement in inputsObj) {
finalTemplate = template.replaceAll(replacement, inputsObj[replacement])
return finalTemplate
}
return finalTemplate
}
例如,would be 和 should be (它将遍历整个对象以获取所有键值对)。replacement
agentsName
inputsObj[replacement]
John
但这行不通。我猜这是因为我尝试使用变量作为模式和替换(当我尝试使用常规字符串时,它确实有效,所以我知道其他一切都正常)。但我不知道如何解决这个问题。有什么想法吗?
编辑:我尝试使用模板文字,但没有用
答:
1赞
protob
2/27/2023
#1
您可以在示例中进行如下替换,您应该只在函数末尾返回结果:
let inputsObj = {
templateList: 'blank',
agentsName: 'John',
agentsPhone: '000-000-0000'
}
let template = "My name is agentsName and this is my phone number: agentsPhone"
const getReplacements = () => {
for (let replacement in inputsObj) {
template = template.replaceAll(replacement, inputsObj[replacement])
}
return template
}
console.log(getReplacements());
或者,您可以使用 method 获取键数组,并使用更短的语法:Object.keys
reduce
let inputsObj = {
templateList: 'blank',
agentsName: 'John',
agentsPhone: '000-000-0000'
};
let template = "My name is agentsName and this is my phone number: agentsPhone";
const getReplacements = () => Object.keys(inputsObj).reduce((acc, key) => acc.replaceAll(key, inputsObj[key]), template)
console.log(getReplacements())
1赞
Konrad
2/27/2023
#2
- 不能在循环的第一次迭代中返回
- 你必须使用
replaceAll
finalTemplate
let inputsObj = {
templateList: 'blank',
agentsName: 'John',
agentsPhone: '000-000-0000'
}
let template = "My name is agentsName and this is my phone number: agentsPhone"
const getReplacements = () => {
let finalTemplate = template
for (let replacement in inputsObj) {
finalTemplate = finalTemplate.replaceAll(replacement, inputsObj[replacement])
}
return finalTemplate
}
console.log(getReplacements())
0赞
Mister Jojo
2/27/2023
#3
只需为此使用模板
let inputsObj =
{ templateList : 'blank'
, agentsName : 'John'
, agentsPhone : '000-000-0000'
};
const getReplacements = ({agentsName, agentsPhone}) =>
`My name is ${agentsName} and this is my phone number: ${agentsPhone}`;
console.log(getReplacements(inputsObj))
评论
didn't work