例如:'?name=feizhu&from=alibaba&job=frontend&extraInfo=%7B%22a%22%3A%22b%22%2C%22c%22%3A%22d%22%7D'
===> {name:"feizhu",from:'alibaba',job:'frontend',extraInfo: {a: 'b', c: 'd'}}
思路如下:对传入的url进行切割,保留问号后的部分,并且对处理后的数据进行&符号分割。对分割的每一部分进行循环遍历,对于遍历的每一部分再进行=分割,分割后的第1项就是键的值,然后,我们对这个值进行判断,如果包含%就说明需要做解析处理后赋值给要返回的对象,利用decodeURIComponent方法就可以进行解析的,并且要JSON.parse一下,这样处理后就不是一个字符串类型的对象了(decodeURIComponent)如若不包含就不处理直接赋值给我们要返回的对象。
const url = '?name=feizhu&from=alibaba&job=frontend&extraInfo=%7B%22a%22%3A%22b%22%2C%22c%22%3A%22d%22%7D';
function parseQueryString(url) {
// TODO
var obj = {};
var params = url.slice(1);
var arr = (params.split('&'));
arr.forEach((v, i) => {/* */
let str=v.split('=')[1];
if(str.indexOf('%')===-1){
obj[v.split("=")[0]] =v.split("=")[1];
}else{
obj[v.split("=")[0]] =JSON.parse(decodeURIComponent(v.split("=")[1]));
}
})
return obj;
}
console.log(parseQueryString(url)); // => {name:"feizhu",from:'alibaba',job:'frontend',extraInfo: {a: 'b', c: 'd'}}