如何使用变量作为模式并替换 replaceAll() 方法?

How can I use variables as the pattern and the replacement of replaceAll() method?

提问人:lulufv 提问时间:2/27/2023 最后编辑:lulufv 更新时间:2/27/2023 访问量:31

问:

我有一个表单,一旦点击提交按钮,就会生成一个对象。每个键值对都是按照以下模式构建的: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 (它将遍历整个对象以获取所有键值对)。replacementagentsNameinputsObj[replacement]John

但这行不通。我猜这是因为我尝试使用变量作为模式和替换(当我尝试使用常规字符串时,它确实有效,所以我知道其他一切都正常)。但我不知道如何解决这个问题。有什么想法吗?

编辑:我尝试使用模板文字,但没有用

JavaScript 变量方法 替换 ReplaceAll

评论

0赞 Mister Jojo 2/27/2023
使用 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...
0赞 lulufv 2/27/2023
@MisterJojo我已经尝试过了,但没有用......
0赞 Konrad 2/27/2023
为什么在循环的第一次迭代中返回?
0赞 Mister Jojo 2/27/2023
你说的是什么意思?这并不是一个建设性的回应......didn't work

答:

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.keysreduce

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
  1. 不能在循环的第一次迭代中返回
  2. 你必须使用replaceAllfinalTemplate

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))