Возможен случай редуктора после функции карты. - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь понять, будет ли 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 Ответ

0 голосов
/ 18 декабря 2018

Не вижу смысла это усложнять.Просто используйте 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 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...