方法解析
- 使用encodeURIComponent进行编码,比如中文
- 考虑到对象是否还包含别的类型,如数组 对象
代码
function encodeSearchParams(obj) {
const params = [];
Object.keys(obj).forEach((key) => {
let value = obj[key];
// 如果值为undefined置空
if (typeof value === 'undefined') {
value = '';
}
//使用encodeURIComponent进行编码
if (Array.isArray(obj[key])) {//类型为数组的时候
value.forEach(item => {
params.push([key, encodeURIComponent(item)].join('='));
});
}
if (Object.prototype.toString.call(obj[key]) === '[object Object]') {//类型为对象的时候
Object.keys(obj[key]).forEach(item => {
params.push([key, encodeURIComponent(obj[key][item])].join('='));
})
}
else {
params.push([key, encodeURIComponent(value)].join('='));
}
});
return params.join('&');
}
let obj = {
'username': 'zhangsan',
arr: ['a', 'b', 'c'],
obj: { obj1: 'obj1', obj2: 'obj2' }
};
let str = `${baseUrl}?${encodeSearchParams(obj)}`; //方法使用
// baseUrl = 'www.good.com'
//www.good.com?username=zhangsan&arr=a&arr=b&arr=c&arr=a%2Cb%2Cc&obj=obj1&obj=obj2