2011-01-11 2 views
8

Y at-il une fonction js pour convertir un tableau en urlencoded? je suis totalement novice n JS ... merci! ...JavaScript Array to URLencoded


mon tableau est un tableau clé de valeur & .... donc,

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

est le même que

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

existe-t-il une solution?


oh ... sory j'ai un tableau comme celui-ci

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

alors je besoin du tableau converti en être:

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

Parlez-vous de l'URL à coder chaque chaîne dans un tableau ou les concaténer dans une chaîne de requête URL ou .. ? – jerluc

+0

Le codage d'URL est uniquement appliqué aux chaînes. Si vous souhaitez l'appliquer à un tableau, vous devez d'abord expliquer ce que vous voulez dire par là - voulez-vous concaténer le tableau en une seule chaîne? Voulez-vous encoder des éléments de tableau individuels? Comment traitez-vous les éléments de tableau non-string (tels que les objets, les fonctions ou d'autres tableaux)? Ce serait une bonne idée de modifier votre question pour inclure au moins un exemple de ce que vous souhaitez réaliser (tableau original, chaîne encodée par url). –

Répondre

9

Vous pouvez faire quelque chose comme ceci:

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

J'irais avec 'var url = '?' + myData.join ('&'); ' – earthmeLon

17

Essayez ceci:

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

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

out.join('&'); 
+2

Il vaut mieux faire: out.push (clé +' = '+ encoderURIComponent (arr [clé])); –

1

Extrait de jgrunds répondre, si vous souhaitez étendre les fonctionnalités de tableau

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

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

    return out.join('&'); 
} 

Ou si vous voulez une fonction autonome

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 vous utilisez un objet au lieu d'un tableau, vous pouvez le faire (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));