Массив JavaScript для URLencoded

есть ли какая-либо 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...

существует ли какое-либо решение?


oh sory... У меня есть такой массив

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

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

id=354313&fname=Henry&lname=Ford

Ответ 1

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

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

Ответ 2

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

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?".

Ответ 3

Если вы используете 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 (form).serializeArray()):

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

Ответ 4

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

Ответ 5

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

Ответ 6

Взято из ответа 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('&');
}

Ответ 7

var myObject = {
  a: {
    one: 1,
    two: 2,
    three: 3
  },
  b: [ 1, 2, 3 ]
};
var recursiveEncoded = $.param( myObject );
var recursiveDecoded = decodeURIComponent( $.param( myObject ) );

alert( recursiveEncoded );
alert( recursiveDecoded );

Значения recursiveEncoded и recursiveDecoded оповещаются следующим образом:

A% 5Bone% 5D = 1 & амп; A% 5Btwo% 5D = 2 & амп; A% 5Bthree% 5D = 3 & амп; б% 5B% 5D = 1 & амп; б% 5B% 5D = 2 & амп; б% 5B% 5D = 3 а [один] = 1 & амп; а [два] = 2 & амп; а [три] = 3 & амп; б [] = 1 & амп; б [] = 2 & амп; б [] = 3

https://api.jquery.com/jQuery.param/