Juanma Santoyo

En ocasiones me llaman friki

Formatear cadenas con placeholders en JavaScript (II)

| 2 Comentarios

Esta mañana comentaba una función que estoy utilizando para construir cadenas con placeholders en JavaScript. Mientras acababa el post, consideré la opción de hacerle una pequeña mejora, pero no tenía tiempo. Así que publico ahora dicha mejora.

La idea es poder usar la misma técnica sin la necesidad de que los placeholders sean identificadores numéricos. Es decir, un placeholder podría identificarse con una cadena de texto cualquiera. Por ejemplo, esto es lo que teníamos antes:

var precioFinal = stringFormat('El precio final es de {0} {1}', precio, moneda);

La idea es poder hacer algo como esto:

var precioFinal = stringFormat('El precio final es de {precio} {moneda}'
    , {
        'precio' : precio
        , 'moneda' : moneda
    }
);

Esto es mucho más simple de usar ya que nos elimina la complejidad de tener que conocer el identificador numérico de cada argumento que usamos, lo cual es fácil si tenemos pocos parámetros, pero se complica si usamos varios.

Ésta es la función:

function stringFormat(string, values)
{
    for(var i in values)
    {
        var expresion = new RegExp('\{' + (i) + '\}', 'ig');
        string = string.replace(expresion, values[i]);
    }

    return string;
}

En realidad, el algoritmo se basa en un for in, eso quiere decir que si queremos usar la función con placeholders numéricos también podríamos hacer algo como:

var precioFinal = stringFormat('El precio final es de {0} {1}'
    , [
        precio
        , moneda
    ]
);

¡Espero que esta función os sea de utilidad!

Share on FacebookTweet about this on TwitterShare on Google+Share on LinkedInEmail this to someone

2 Comments

  1. Buen tip Juanma :), pero el “for in” es más lento que for con índice, y por lo tanto, es mejor evitarlo.

  2. Marcos, coincido en que hay que evitar el for in, pero en esta ocasión no tenemos alternativa ya que tenemos que recorrer un objeto; algo como:

    {
    ‘precio’ : precio
    , ‘moneda’ : moneda
    }

    Además, una circunstancia importante es que el mismo código nos vale para recorrer un array y reemplazar con placeholders numéricos, tal y como hago en el último ejemplo del artículo.

    ¿Conoces alguna forma de recorrer un objeto con un for? Esa podría ser una solución…

Deja un comentario

Los campos obligatorios están marcados con *.