【问题标题】:Only last item of array is replaced [duplicate]只有数组的最后一项被替换[重复]
【发布时间】:2019-12-24 12:38:23
【问题描述】:

我需要替换电子邮件正文的变量。如果变量名存在于variableNames数组中,则必须替换。

但问题是只有与variableNames Names 的姓氏相对应的最后一个被替换(在我的例子中:'NAME4')。我究竟做错了什么?我该如何解决?

var variableNames = [
  'NAME1',
  'NAME2',
  'NAME3',
  'NAME4'];

var regex = '';
var key2 = '';
var position = '';

for (var key in variables) {

  if (variableNames.includes(key)) {

    position = variableNames.indexOf(key);
    key2 = variableNames[position];
    regex = new RegExp("###" + key2 + "###", "g");

    template.content = template.body.replace(regex, variables[key2]); 
    //only replace the last one
  }

}

【问题讨论】:

    标签: javascript arrays node.js for-loop replace


    【解决方案1】:

    您要替换的输入字符串始终为template.body(因此,在每次迭代之后,只有被替换一次的原始字符串被分配给template.content)。

    将要替换的字符串保存在变量中。

    另外,因为您正在 variableNames 数组中寻找 key,并从中构造正则表达式,所以 includes 检查就足够了 - 只需将 key 传递给 new RegExp,不需要再次搜索数组以获取您已经拥有的变量:

    const variableNames = [
      'NAME1',
      'NAME2',
      'NAME3',
      'NAME4'
    ];
    
    let tempString = template.body;
    for (const key in variables) {
      if (variableNames.includes(key)) {
        const regex = new RegExp("###" + key + "###", "g");
        tempString = tempString.replace(regex, variables[key]);
      }
    }
    template.content = tempString;
    

    这可能可以通过替换函数更优雅地完成,但是如果不了解更多关于variables 的信息,就很难说出代码到底是什么样的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-07
      • 1970-01-01
      • 2020-04-14
      • 2017-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多