JavaScript equivalent of Python's format() function?
Another approach, using the String.prototype.replace
method, with a "replacer" function as second argument:
String.prototype.format = function () { var i = 0, args = arguments; return this.replace(/{}/g, function () { return typeof args[i] != 'undefined' ? args[i++] : ''; });};var bar1 = 'foobar', bar2 = 'jumped', bar3 = 'dog';'The lazy {} {} over the {}'.format(bar3, bar2, bar1);// "The lazy dog jumped over the foobar"
There is a way, but not exactly using format.
var name = "John";var age = 19;var message = `My name is ${name} and I am ${age} years old`;console.log(message);
jsfiddle - link
tl;dr
foo = (a, b, c) => `The lazy ${a} ${b} over the ${c}`
Why template strings alone aren't enough
ES6 template strings provide a feature quite similar to pythons string format. However, you have to know the variables before you construct the string:
var templateString = `The lazy ${bar3} ${bar2} over the ${bar1}`;
Why format?
Python's str.format
allows you to specify the string before you even know which values you want to plug into it, like:
foo = 'The lazy {} {} over the {}'bar1 = 'foobar'bar2 = 'jumped'bar3 = 'dog'foo.format(bar3, bar2, bar1)
Solution
With an arrow function, we can elegantly wrap the template string for later use:
foo = (a, b, c) => `The lazy ${a} ${b} over the ${c}`bar1 = 'foobar';bar2 = 'jumped';bar3 = 'dog';foo(bar3, bar2, bar1)
Of course this works with a regular function as well, but the arrow function allows us to make this a one-liner. Both features are available in most browsers und runtimes: