61 votes

Équivalent JavaScript de la fonction format() de Python ?

Python a cette belle fonction pour transformer ceci :

 bar1 = 'foobar'
bar2 = 'jumped'
bar3 = 'dog'

foo = 'The lazy ' + bar3 + ' ' + bar2 ' over the ' + bar1
# The lazy dog jumped over the foobar

Dans ceci :

 bar1 = 'foobar'
bar2 = 'jumped'
bar3 = 'dog'

foo = 'The lazy {} {} over the {}'.format(bar3, bar2, bar1)
# The lazy dog jumped over the foobar

JavaScript a-t-il une telle fonction ? Sinon, comment en créer un qui suit la même syntaxe que l'implémentation de Python ?

60voto

CMS Points 315406

Autre approche, utilisant la méthode String.prototype.replace , avec une fonction "replacer" en 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"

35voto

Yash Mehrotra Points 1247

Il existe un moyen, mais pas exactement en utilisant le format.

 var name = "John";
var age = 19;
var message = `My name is ${name} and I am ${age} years old`;
console.log(message);

jsfiddle - lien

10voto

Tomáš Diviš Points 736

À la recherche d'une réponse à la même question, je viens de trouver ceci : https://github.com/davidchambers/string-format , qui est "le formatage de chaîne JavaScript inspiré du str.format() de Python". Il semble que ce soit à peu près la même chose que la fonction format() de python.

6voto

PatrikAkerstrand Points 23968

Tiré de la bibliothèque de YAHOO :

 YAHOO.Tools.printf = function() { 
  var num = arguments.length; 
  var oStr = arguments[0];   
  for (var i = 1; i < num; i++) { 
    var pattern = "\\{" + (i-1) + "\\}"; 
    var re = new RegExp(pattern, "g"); 
    oStr = oStr.replace(re, arguments[i]); 
  } 
  return oStr; 
} 

Appelez-le comme :

 bar1 = 'foobar'
bar2 = 'jumped'
bar3 = 'dog'

foo = YAHOO.Tools.printf('The lazy {0} {1} over the {2}', bar3, bar2, bar1); 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X