I requisiti della domanda originale chiaramente non potevano beneficiare dell'interpolazione di stringhe, poiché sembra che si tratti di un'elaborazione runtime di chiavi di sostituzione arbitrarie.
Tuttavia , se dovessi solo eseguire l'interpolazione delle stringhe, puoi usare:
const str = `My name is ${replacements.name} and my age is ${replacements.age}.`
Notare i backtick che delimitano la stringa, sono obbligatori.
Per una risposta che soddisfi i requisiti del particolare OP, è possibile utilizzare String.prototype.replace()
per le sostituzioni.
Il codice seguente gestirà tutte le corrispondenze e non toccherà quelle senza una sostituzione (purché i valori di sostituzione siano tutte stringhe, in caso contrario, vedere di seguito).
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 alcune delle tue sostituzioni non sono stringhe, assicurati prima che siano presenti nell'oggetto. Se hai un formato come nell'esempio, cioè racchiuso in segni di percentuale, puoi utilizzare l' in
operatore per ottenere ciò.
jsFiddle .
Tuttavia, se il tuo formato non ha un formato speciale, cioè nessuna stringa, e il tuo oggetto di sostituzione non ha un null
prototipo, usalo Object.prototype.hasOwnProperty()
, a meno che tu non possa garantire che nessuna delle tue potenziali sottostringhe sostituite si scontrerà con i nomi delle proprietà sul prototipo.
jsFiddle .
Altrimenti, se la stringa di sostituzione fosse 'hasOwnProperty'
, si otterrebbe una stringa confusa risultante.
jsFiddle .
Come nota a margine, dovresti essere chiamato replacements
un Object
, non un Array
.