在不知道JavaScript对象的键的情况下,我如何将…
var obj = {
param1: 'something',
param2: 'somethingelse',
param3: 'another'
}
obj[param4] = 'yetanother';
…到…
var str = 'param1=something¶m2=somethingelse¶m3=another¶m4=yetanother';
...?
在不知道JavaScript对象的键的情况下,我如何将…
var obj = {
param1: 'something',
param2: 'somethingelse',
param3: 'another'
}
obj[param4] = 'yetanother';
…到…
var str = 'param1=something¶m2=somethingelse¶m3=another¶m4=yetanother';
...?
当前回答
Object.keys(obj).map(k => `${encodeURIComponent(k)}=${encodeURIComponent(obj[k])}`).join('&')
其他回答
var str = "";
for (var key in obj) {
if (str != "") {
str += "&";
}
str += key + "=" + encodeURIComponent(obj[key]);
}
例如:http://jsfiddle.net/WFPen/
一行没有依赖项:
new URLSearchParams(obj).toString();
// OUT: param1=something¶m2=somethingelse¶m3=another¶m4=yetanother
使用它的URL内置如下:
let obj = { param1: 'something', param2: 'somethingelse', param3: 'another' }
obj['param4'] = 'yetanother';
const url = new URL(`your_url.com`);
url.search = new URLSearchParams(obj);
const response = await fetch(url);
[编辑2020年4月4日]:空值将被解释为字符串'null'。
[编辑2022年3月9日]:浏览器兼容性
var str = '';
for( var name in obj ) {
str += (name + '=' + obj[name] + '&');
}
str = str.slice(0,-1);
试试吧。
例如:http://jsfiddle.net/T2UWT/
试试这个…这也适用于嵌套对象。
let my_obj = {'single':'this is single', 'nested':['child1','child2']};
((o)=>{ return Object.keys(o).map(function(key){ let ret=[]; if(Array.isArray(o[key])){ o[key].forEach((item)=>{ ret.push(`${key}[]=${encodeURIComponent(item)}`); }); }else{ ret.push(`${key}=${encodeURIComponent(o[key])}`); } return ret.join("&"); }).join("&"); })(my_obj);
我们还应该处理任何项的值是未定义的情况,该键不应该包含在序列化的字符串中。
const serialize = (obj) => {
return Object.entries(obj)
.filter(([, value]) => value)
.map(([key, value]) => `${key}=${encodeURIComponent(value)}`)
.join('&');
}