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

5

我想将JavaScript对象数组生成为URL字符串,例如:

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

我相信这可能是可以的,只需要付出一点努力。你尝试过什么? - Yuriy Galanter
我尝试了$.param(array),但它没有起作用。 - Eniz Gülek
6个回答

9

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

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

const parts = array.map((param) => {
  return(
    encodeURIComponent(param.name) + '=' +
    encodeURIComponent(param.value)
  );
});

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

console.log(url);


6
您可以这样做。
var url = "";
array.forEach(function(e){
   url += e.name + "=" + e.value + "&";
});
url = url.trim("&");

2
你需要循环遍历数组,判断数组条目是否为第一个(这样它们将用 & 分隔),并使用 JSON 字段名称。
var queryString = "";
for ( var i = 0; i++; i < array.length ) {
    if ( i > 0 ) {
        queryString = queryString + "&";
    }
    queryString = queryString + array[i]["name"] + "=" + array[i]["value"];
}

1

Try this code:

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

1

0

不需要循环和辅助变量,数组内置方法可以实现。

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'

安全使用(但不是期望的操作员输出):

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接