映射功能后可能的减速器情况。

时间:2018-12-18 16:29:15

标签: javascript ecmascript-6

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

所以我在做什么,看是否在匹配我的正则表达式的字符串中有任何匹配项。然后将文本放入匹配项中,并用一个变量替换它。一切都很好,但是我想清理一下。 findReplaceTemplateString是一个单独的函数,我可以接受。它的forEach感觉就像我可以使用reducer来返回完成的字符串。但是我是减速机的新手,不知道这是否合适。任何人对此都有任何想法。

  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 个答案:

答案 0 :(得分:3)

我看不出过于复杂的意义。只需将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 );