Функция работает не так как нужно!
Мой код:
String.prototype.translate = function(vars){
for (const [KEY, value] of Object.entries(vars)) {
return this.replace(/\%(KEY)\%/g,value)
}
}
Должно быть так:
Congratulations,niksonbinsk on leveling up: 6
А на самом деле получается вот так:
Congratulations,%name% on leveling up: %level%
Что я делаю не так?
Ответы (2 шт):
Автор решения: Igor
→ Ссылка
String.prototype.translate = function(vars){
var str = this;
for (const [KEY, value] of Object.entries(vars)) {
console.log(KEY, value);
str = str.replace(new RegExp(`%${KEY}%`, 'g'), value)
}
return str;
}
console.log("Congratulations,%name% on leveling up: %level%".translate({
name: "niksonbinsk",
level: 6
}));
Автор решения: Grundy
→ Ссылка
Для использования значения переменной в регулярном выражении нужно воспользоваться конструктором
new RegExpreturnсразу прекращает выполнение цикла и метода, поэтому сейчас в цикле выполняется только первая итерация.метод
.replaceне меняет исходную строку, поэтому нужно сохранять результат на каждой итерации
В итоге код может выглядеть так:
String.prototype.translate = function(vars){
var result = this;
for (const [KEY, value] of Object.entries(vars)) {
result = result.replace(new RegExp('\\%(' + KEY + ')\\%', 'g'),value)
}
return result;
}