将url地址中传入的字符串解析成对象的形式,具体方法如下:
// 解析URL 写一个程序 解析queryString 返回对象
function parse(str) {
//将字符串切割为数组 返回一个对象
return str.split('&').reduce(function (pre, cur) {
const [key, value] = cur.split("=");
if (!value) {
return pre
}
// pre[key] = value;
deep_set(pre, key.split(/[\[\]]/g).filter(x => x), value);
return pre
}, {})
}
function deep_set(pre, path, value) {
let i = 0;
for (; i < path.length - 1; i++) {
if (pre[path[i]] === undefined) {
if (path[i + 1].match(/^\d+$/)) {
pre[path[i]] = []
} else {
pre[path[i]] = {}
}
}
pre = pre[path[i]]
}
pre[path[i]] = decodeURIComponent(value)
}
console.log(parse("a=1&b=2&c=3"));
console.log(parse("a[name]=zs&b=2&c=3&a[age]=18"));
console.log(parse("a&b&c"));
console.log(parse("color=Deep%20Bule&size=s%20cc"));
console.log(parse("a[0]=1&a[1]=2&b=2"));
代码实现如下: