16 marzo, 2008

John Resig - Busca pero no reemplaces

John Resig propone una función para convertir una cadena como "foo=1&foo=2&foo=3&blah=a&blah=b" en otra que así: "foo=1,2,3&blah=a,b".

function compress(data){
    var q = {}, ret = "";
    data.replace(/([^=&]+)=([^&]*)/g, function(m, key, value){
        q[key] = (q[key] ? q[key] + "," : "") + value;
    });
    for ( var key in q )
        ret = (ret ? ret + "&" : "") + key + "=" + q[key];
    return ret;
Resulta muy interesante el uso de la función replace con una función que recibe las partes clave y valor y cuyo resultado se reemplazará en la cadena a buscar. También es interesante la técnica para comprobar si se debe concatenar una pieza más a una cadena separada por una coma:
ret = (ret ? ret + "&" : "") + value;

Publicar un comentario en la entrada

Últimos links en indiza.com