Уведомления в личном кабинете МТС приходят из CMS шаблонами: «Списано {{ amount }} ₽ за тариф {{ tariff.name }}». Шаблоны пишут редакторы, данные приходят из биллинга, а показываем мы через innerHTML.
Напишите render(tpl, data). Метка — {{ путь }}: имя поля или путь через точку, пробелы внутри скобок допустимы. Значение превращается в строку: 0 и false выводятся как есть, null, undefined и отсутствующее поле — пустая строка.
Значение экранируется: & → &, < → <, > → >, " → ", ' → '. Незакрытая метка {{ percent остаётся в тексте без изменений.
В работе: Тексты уведомлений и писем, подписи в интерфейсе из CMS, простые шаблоны без фреймворка.
Пример 1: одно поле
"Баланс: {{balance}} ₽", {"balance": 350}"Баланс: 350 ₽"
Пример 2: путь и пробелы
"Тариф {{ tariff.name }} до {{tariff.until}}", {"tariff": {"name": "Мой безлимит", "until": "30.11"}}"Тариф Мой безлимит до 30.11"
render — тест вызывает её сам. Таймеры и Date в тестах ненастоящие: время идёт по команде теста, поэтому setTimeout на 5 секунд проверяется мгновенно. Тестов 9: 2 открыты выше, остальные приходят после старта подхода. Лимит — 2 с на тест.
function render(tpl, data) // → string
Источник: на задачах МТС: уведомления личного кабинета. Условие пересказано своими словами.
Ожидаемый ответ не нужен: покажем, что вернула функция.
Здесь появится результат отправки.