Массив JavaScript в URLencoded - PullRequest
       2

Массив JavaScript в URLencoded

12 голосов
/ 11 января 2011

есть ли функция js для преобразования массива в urlencoded?Я новичок, JS ... спасибо! ...


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

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

Ответы [ 6 ]

23 голосов
/ 19 июля 2011

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

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

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

out.join('&');

Для объяснения того, почему используйте hasOwnProperty, взгляните на этот ответ на вопрос «Как выполнить цикл или перечисление объекта JavaScript?» .

9 голосов
/ 11 января 2011

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

var myData = new Array('id=354313', 'fname=Henry', 'lname=Ford');
var url = myData.join('&');
5 голосов
/ 04 апреля 2018

Если вы используете jQuery, можете использовать $ .param ().Отметьте здесь .Пример использования

var myData = {'id' : '354313', 'fname' : 'Henry', 'lname' : 'Ford'};
var url = "https://stackoverflow.com?" + $.param(myData);

Вывод

https://stackoverflow.com?id=354313&fname=Henry&lname=Ford

Также работает с массивом объектов (например, из jQuery (форма) .serializeArray () ):

var myData = [{'id' : '354313'}, {'fname' : 'Henry'},{'lname' : 'Ford'}];
5 голосов
/ 23 октября 2017

Если вы используете объект вместо массива, вы можете сделать это (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));
0 голосов
/ 27 ноября 2014

Взято из ответа 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('&');
}
0 голосов
/ 11 января 2011

Посмотрите на функцию escape и unescape .

...