Как определить переменную в функции?
Имею строку вида: let a = `text ${variable} text ${variable} text`
Хочу заполнить переменные чем-то из функции.
someFunction(a)
Пытался так:
function replace(literals, ...variable) {
let concatResult = "";
let changeOn = "aaaaaaa"
const variableChanged = variable.map((evenItem) => {return evenItem = changeOn});
//Конкатенация строковых литералов и подстановок.
for (let i = 0; i < variableChanged.length; i++) {
concatResult += literals[i] + variableChanged[i];
}
//Присоединение последнего элемента из массива литералов, массив literals всегда на один элемент больше, чем массив variable.
concatResult += literals[literals.length - 1];
return concatResult;
}
Однако, при такой предаче replace`text ${variable} text ${variable} text` все работает.
А вот переменную "a" туда не передать.
Есть идеи?
Ответы (1 шт):
Насклько я понимаю, вы хотите использовать функцию для шаблонных строк как обычную функцию. К сожалению, использовать её с тем же видом шаблонной строки не получится — при вызове таких функций движок сам разбирает строку на массив литералов и значение переменных, тогда как при передаче такой строки в обычный вызов функции строка сначала подвергнется интерполяции переменных и будет передана уже единой простой строкой. Единственный способ достигнуть того, что вам нужно (идентичного поведения при обычном вызове), это самому разобрать строку на составляющие:
replace(['text ', ' text ', ' text'], variable, variable);
Но такая сложность вряд ли оправдана, даже если её как-то автоматизировать.
Возможно, вам стоит дополнить вопрос, объяснив, зачем вам такое злоупотребление функциями для шаблонных строк)