代码之家  ›  专栏  ›  技术社区  ›  me-me

映射函数后可能出现的减速器情况。

  •  2
  • me-me  · 技术社区  · 7 年前

    我想看看在这种情况下,array.reduce是否是一个更好的选择。 我希望返回字符串结果,而不必在forEach循环中设置变量。

    所以我要做的是看看字符串中是否有匹配我的正则表达式的匹配项。然后将文本放入匹配项中,并将其替换为我传递给它的变量。一切都很好,但如果可以的话,我想把它清理干净。findReplaceTemplateString是一个单独的函数,我同意。它的forEach感觉就像我可以使用一个减速机,而不是返回完整的字符串。但我对减速机还不熟悉,不确定这是否是一个很好的例子。任何人对此有任何想法。

      const reg = /\{.+?\}/g;
      const matches = tpl.match(reg);
    
      let str = '';      
      matches.map(item => item.slice(1, -1)).forEach((placeHolder) => {
        str = findReplace(tpl, placeHolder, props[placeHolder] || '');
      });
    
    1 回复  |  直到 7 年前
        1
  •  3
  •   VisioN    7 年前

    我看不出把它复杂化有什么意义。简单使用 String.prototype.replace() 将函数作为第二个参数。这将用有效参数动态替换您的模式。

    const input = 'Hi there, {name}! What are you doing in {city}?';
    const props = {name: 'Alex', city: 'St Petersburg'};
    
    const output = input.replace(/\{.+?\}/g, (p) => {
      return props[p.slice(1, -1)] || p /* here you may use '' */;
    });
    
    console.log( output );