Saltar al contenido

JavaScript equivalente a printf/String.Format

Por fin luego de mucho batallar hemos dado con la contestación de este atascamiento que agunos usuarios de este sitio web han presentado. Si deseas compartir algo puedes dejar tu comentario.

Solución:

Sobre la base de las soluciones sugeridas anteriormente:

// First, checks if it isn't implemented yet.
if (!String.prototype.format) 
  String.prototype.format = function() 
    var args = arguments;
    return this.replace(/(d+)/g, function(match, number)  
      return typeof args[number] != 'undefined'
        ? args[number]
        : match
      ;
    );
  ;

"0 is dead, but 1 is alive! 0 2".format("ASP", "ASP.NET")

salidas

¡ASP está muerto, pero ASP.NET está vivo! ASP2


Si prefiere no modificar Stringprototipo de:

if (!String.format) 
  String.format = function(format) 
    var args = Array.prototype.slice.call(arguments, 1);
    return format.replace(/(d+)/g, function(match, number)  
      return typeof args[number] != 'undefined'
        ? args[number] 
        : match
      ;
    );
  ;

Te da el mucho más familiar:

String.format('0 is dead, but 1 is alive! 0 2', 'ASP', 'ASP.NET');

con el mismo resultado:

¡ASP está muerto, pero ASP.NET está vivo! ASP2

JavaScript actual

Desde ES6 en adelante, podría usar cadenas de plantilla:

let soMany = 10;
console.log(`This is $soMany times easier!`);
// "This is 10 times easier!

Consulte la respuesta de Kim a continuación para obtener más detalles.


Respuesta anterior

Pruebe sprintf() para JavaScript.


Si realmente quiere hacer un método de formateo simple por su cuenta, no haga los reemplazos sucesivamente sino simultáneamente.

Debido a que la mayoría de las otras propuestas que se mencionan fallan cuando se reemplaza string del reemplazo anterior también contiene una secuencia de formato como esta:

"01".format("1", "0")

Normalmente esperaría que la salida fuera 10 pero la salida real es 11. Así que haz un reemplazo simultáneo como en la sugerencia de fearphage.

Es divertido porque Stack Overflow en realidad tiene su propia función de formato para el String prototipo llamado formatUnicorn. ¡Intentalo! Entra en la consola y escribe algo como:

"Hello, name, are you feeling adjective?".formatUnicorn(name:"Gabriel", adjective: "OK");

bicho de fuego

Obtienes esta salida:

Hello, Gabriel, are you feeling OK?

¡Puede usar objetos, matrices y cadenas como argumentos! Obtuve su código y lo modifiqué para producir una nueva versión de String.prototype.format:

String.prototype.formatUnicorn = String.prototype.formatUnicorn ||
function () 
    "use strict";
    var str = this.toString();
    if (arguments.length) 

    return str;
;

Tenga en cuenta lo inteligente Array.prototype.slice.call(arguments) llamada: eso significa que si agrega argumentos que son cadenas o números, no un solo objeto de estilo JSON, obtiene C# String.Format comportamiento casi exactamente.

"a0bcd1ef".formatUnicorn("FOO", "BAR"); // yields "aFOObcdBARef"

Eso es porque Array‘s slice forzará lo que sea que esté en arguments en una Arraysea original o no, y el key será el índice (0, 1, 2…) de cada array elemento coaccionado en un string (por ejemplo, “0”, entonces "\0\" para su primer patrón de expresión regular).

Limpio.

Si te mola el asunto, eres capaz de dejar un ensayo acerca de qué te ha impresionado de este enunciado.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *