Os requisitos da pergunta original claramente não poderiam se beneficiar da interpolação de strings, pois parece que é um processamento em tempo de execução de chaves de substituição arbitrárias.
No entanto , se você apenas teve que fazer interpolação de string, você pode usar:
const str = `My name is ${replacements.name} and my age is ${replacements.age}.`
Observe os crases que delimitam a string, eles são obrigatórios.
Para obter uma resposta adequada aos requisitos específicos do OP, você pode usar String.prototype.replace()
para as substituições.
O código a seguir tratará todas as correspondências e não as alterará sem uma substituição (desde que os valores de substituição sejam todos strings, caso contrário, veja abaixo).
var replacements = {"%NAME%":"Mike","%AGE%":"26","%EVENT%":"20"},
str = 'My Name is %NAME% and my age is %AGE%.';
str = str.replace(/%\w+%/g, function(all) {
return replacements[all] || all;
});
jsFiddle .
Se algumas de suas substituições não forem strings, certifique-se de que elas existam primeiro no objeto. Se você tiver um formato como o exemplo, ou seja, envolto em sinais de porcentagem, você pode usar oin
operador para fazer isso.
jsFiddle .
No entanto, se seu formato não tiver um formato especial, ou seja, qualquer string, e seu objeto de substituição não tiver um null
protótipo, use Object.prototype.hasOwnProperty()
, a menos que você possa garantir que nenhuma de suas possíveis substrings substituídas entrará em conflito com nomes de propriedade no protótipo.
jsFiddle .
Caso contrário, se sua string de substituição fosse 'hasOwnProperty'
, você obteria uma string bagunçada resultante.
jsFiddle .
Como uma nota lateral, você deve ser chamado replacements
um Object
, e não um Array
.