如何将对象数组转换为url字符串?

时间:2014-11-03 15:19:00

标签: javascript

我正在尝试将javascript对象数组生成为urlstring,如:

var array = [{'name': 'foo', 'value': '2'},
             {'name': 'foo', 'value': '2,8'},
             {'name': 'foo', 'value': '2,10,3'}
            ];

// url ==> foo=2&foo=2,8&foo=2,10,3

6 个答案:

答案 0 :(得分:4)

你可以这样做

var url = "";
array.forEach(function(e){
   url += e.name + "=" + e.value + "&";
});
url = url.trim("&");

答案 1 :(得分:3)

为了安全起见,您需要对组件进行编码:

var array = [{'name': 'foo', 'value': '2'},
             {'name': 'foo', 'value': '2,8'},
             {'name': 'foo', 'value': '2,10,3'}
            ];

var parts = [];

for ( var i = 0; i < array.length; ++i )
  parts.push(encodeURIComponent(array[i].name) + '=' + 
             encodeURIComponent(array[i].value));

var url = parts.join('&');

console.log(url);

答案 2 :(得分:1)

您需要遍历数组,确定数组条目是否是第一个(因此它们将用&符号分隔,并使用JSON字段名称。

var queryString = "";
for ( var i = 0; i++; i < array.length ) {
    if ( i > 0 ) {
        queryString = queryString + "&";
    }
    queryString = queryString + array[i]["name"] + "=" + array[i]["value"];
}

答案 3 :(得分:1)

试试这段代码:

var array = [{'name': 'foo', 'value': '2'},
             {'name': 'foo', 'value': '2,8'},
             {'name': 'foo', 'value': '2,10,3'}
            ];
var output = "";

for(var i = 0; i < array.length; i++){
    output = output + array[i].name+"="+array[i].value+"&"
}

output = output.substring(0, output.length-1);
alert(output)

这里是fiddle

答案 4 :(得分:1)

如果您的数组包含参数'name'和'value'的对象,则应使用:

$。PARAM(数组)

http://api.jquery.com/jquery.param/

答案 5 :(得分:0)

不需要循环和辅助变量,Array内置方法可以做到。

Array.map + Array.join

> array.map(p => p.name + '=' + p.value).join('&')
'foo=2&foo=2,8&foo=2,10,3'

> array.map(function(param){
    return param.name + '=' + param.value
  }).join('&')
'foo=2&foo=2,8&foo=2,10,3'

安全使用(但不是预期的OP输出):

> array.map(p => encodeURIComponent(p.name) + '=' + encodeURIComponent(p.value)).join('&')
'foo=2&foo=2%2C8&foo=2%2C10%2C3'