javascript 如何使用变量作为模式和replaceAll()方法的替代?

w8ntj3qf  于 2023-02-28  发布在  Java
关注(0)|答案(3)|浏览(96)

我有一个表单,一旦点击提交按钮,就会生成一个对象,每个键-值对都是按照以下模式构建的: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"

输入字段的数量是未知的(因为它取决于其他因素),而且它们不会总是相同的,所以我尝试创建一个函数来动态地替换这些占位符,我尝试循环inputsObj,然后将每个键替换为它的值:

let finalTemplate

const getReplacements = () => {
   for (let replacement in inputsObj) {
       finalTemplate = template.replaceAll(replacement, inputsObj[replacement])
            return finalTemplate
   }
   return finalTemplate
}

例如,replacement应该是agentsNameinputsObj[replacement]应该是John(并且它将遍历整个对象,以便获得所有的键值对)。
但是这个方法不起作用。我猜是因为我尝试使用变量作为模式和替换(当我尝试使用常规字符串时,它确实起作用了,所以我知道其他一切都很好)。但是我不知道如何解决这个问题。有什么想法吗?

**EDIT:**我尝试使用模板文本,但不起作用

j91ykkif

j91ykkif1#

1.不能在循环的第一次迭代中返回
1.必须在finalTemplate上使用replaceAll

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

lbsnaicq2#

你可以像这样在你的例子中进行替换,你应该只在你的函数结束时返回结果:

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

或者,您可以使用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())
sgtfey8w

sgtfey8w3#

只需使用template littérals即可

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

相关问题