2011-01-11 1 views
8

Есть ли какая-либо функция js для преобразования массива в urlencoded? я полностью новичок п JS ... спасибо! ...JavaScript Array to URLencoded


мой массив является ключевым массив & значение .... так,

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

такая же, как

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

Есть ли решение?


о Сори ... у меня есть массив как этот

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

тогда я нужен массив преобразуется быть:

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

Вы говорите о URL кодирования каждой строки в массиве или конкатенации их в строку URL запроса или .. ? – jerluc

+0

Кодировка Url применяется только к строкам. Если вы хотите применить его к массиву, сначала вам нужно объяснить, что вы подразумеваете под этим - хотите ли вы объединить массив в одну строку? Вы хотите кодировать отдельные элементы массива? Как вы обрабатываете нестрочные элементы массива (такие как объекты, функции или другие массивы)? Было бы неплохо отредактировать ваш вопрос, чтобы включить хотя бы один пример того, чего вы хотите достичь (исходный массив, в результате строка, закодированная по URL). –

ответ

9

Вы можете сделать что-то вроде этого:

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

Я бы пошел с 'var url = '?' + myData.join ('&'); ' – earthmeLon

17

Попробуйте это:

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

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

out.join('&'); 
+2

Лучше сделать: out.push (key +' = '+ encodeURIComponent (arr [key])); –

1

Взятые из jgrunds ответа, если вы хотите расширить функциональность массива

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

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

    return out.join('&'); 
} 

Или, если вы хотите автономную функцию

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

Если вы используете объект вместо массива вы можете сделать это (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));