2011-01-11 11 views
8

¿Hay alguna función js para convertir una matriz en urlencoded? estoy totalmente novato n JS ... gracias! ...Arreglo de JavaScript para URLencoded


mi matriz es una clave de la matriz & valor .... así,

myData=new Array('id'=>'354313','fname'=>'Henry','lname'=>'Ford'); 

es lo mismo que

myData['id']='354313'; 
myData['fname']='Henry'; 
myData['lname']='Ford'; 
myData.join('&'); //returns error, it doesn't work on such array... 

¿hay alguna solución?


oh sory ... tengo una serie como esta

var myData=new Array('id'=>'354313','fname'=>'Henry','lname'=>'Ford'); 

entonces necesito la matriz convertida a ser:

id=354313&fname=Henry&lname=Ford 
+0

¿Estás hablando de URL codificar cada cadena en una matriz o concatenación de ellas en una cadena de consulta URL o .. ? – jerluc

+0

La codificación de URL solo se aplica a las cadenas. Si desea aplicarlo a una matriz, primero debe explicar lo que quiere decir con eso: ¿desea concatenar la matriz en una sola cadena? ¿Desea codificar elementos de matriz individuales? ¿Cómo se tratan elementos de matriz que no son cadenas (como objetos, funciones u otras matrices)? Sería una buena idea editar su pregunta para incluir al menos un ejemplo de lo que desea lograr (matriz original, cadena resultante codificada en url). –

Respuesta

9

Usted puede hacer algo como esto:

var myData = new Array('id=354313', 'fname=Henry', 'lname=Ford'); 
var url = myData.join('&'); 
+1

Me gustaría ir con 'var url = '?' + myData.join ('&'); ' – earthmeLon

17

Prueba esto:

var myData = {'id': '354313', 'fname':'Henry', 'lname': 'Ford'}; 
var out = []; 

for (var key in myData) { 
    out.push(key + '=' + encodeURIComponent(myData[key])); 
} 

out.join('&'); 
+2

Es mejor hacer: out.push (key +' = '+ encodeURIComponent (arr [key])); –

1

Tomado de jgrunds respuesta, si desea ampliar la funcionalidad gama

Array.prototype.toQueryString = function(){ 
    var out = new Array(); 

    for(key in this){ 
     out.push(key + '=' + encodeURIComponent(this[key])); 
    } 

    return out.join('&'); 
} 

O si Desea una función independiente

function arrayToQueryString(array_in){ 
    var out = new Array(); 

    for(var key in array_in){ 
     out.push(key + '=' + encodeURIComponent(array_in[key])); 
    } 

    return out.join('&'); 
} 
1

Si utiliza un objeto en lugar de una matriz se puede hacer esto (ES6):

var myData = { 
    id: 354313, 
    fname: 'Henry', 
    lname: 'Ford', 
    url: 'https://es.wikipedia.org/wiki/Henry_Ford', 
}; 

encodeDataToURL = (data) => { 
    return Object 
     .keys(data) 
     .map(value => `${value}=${encodeURIComponent(data[value])}`) 
     .join('&'); 
} 

console.log(encodeDataToURL(myData));