Template String in JavaScript

7

I'm having trouble making a function in JavaScript that I pass a string and an object and it fills this string with the attributes of that object, for example:

var user = {
    nome: “danilo”, 
    idade: 29
};
var a = “Meu nome é ${nome}, e tenho ${idade} anos”;
    
asked by anonymous 07.08.2015 / 20:37

3 answers

8

JavaScript currently implemented in browsers does not support string interpolation . You have to do this:

"Meu nome é " + nome + ", e tenho " + idade + " anos"

Or use the function created by Douglas Crockford :

String.prototype.supplant = function (o) {
    return this.replace(/\${([^{}]*)}/g,
        function (a, b) {
            var r = o[b];
            return typeof r === 'string' || typeof r === 'number' ? r : a;
        }
    );
};

Use ( link ):

"Meu nome é ${nome}, e tenho ${idade} anos".supplant({ nome: "danilo", idade : 29 })
    
07.08.2015 / 20:40
6

The ES2015 already has its own template template structure, but as long as we do not have compatibility across browsers, you can use something like this:

var data = {
    host: 'twitter.com',
    port: '80',
    user: 'henricavalcante'
};

var a = "http://${host}:${port}/${user}";

var c = a.split('$').map(function(a) {
    if (a.substr(0,1) !== '{') {
        return a;
    }
    var key = a.substring(1,a.indexOf('}'));
    return a.replace('{'+key+'}', data[key]);
}).join('');

console.log(c); // http://twitter.com/henricavalcante
    
07.08.2015 / 20:39
4

Using Template Strings , available as one of the modules ECMAScript 2015 (ES6) and it should come soon in all browsers (already available in Firefox), you could do this:

var user = {
    nome: "danilo", 
    idade: 29
};
var a = 'Meu nome é ${user.nome}, e tenho ${user.idade} anos';

Or:

with(user) {
    a = 'Meu nome é ${nome}, e tenho ${idade} anos';
}

Note that the inverted quotes were used to encompass this string, since this is the syntax that should be used when working with template strings.

    
07.08.2015 / 21:27