没啥好说的,直接上代码
function parseUrl(search) {
if (typeof search !== 'string' || !search) return {}; // 非 string,或者为空 直接返回 {}
if (search.startsWith('http://') || search.startsWith('https://')) {
search = search.split('?')[1];
}
if (!search) return {}; // 为空直接返回 {}
const params = {}; //定义数组
const list = search.slice(1).split('&'); // 去除 ? ,根据 & 切分参数
list.forEach(item => {
const [k, v] = item.split('='); // 根据 = 分割出 key 和 value
// 根据实际使用情况看是否需要把值转成 undefined !!!
const v2: any = v !== '' ? window.decodeURI(v) : undefined;
// const v2 = window.decodeURI(v);
// if (k === '') {
// // 不存在 key 的时候 存放到 __ 中,默认都放到了 '' 中
// params['__'] = params['__'] === undefined ? [v2] : [].concat(params['__'], v2);
// return;
// }
if (params[k] === undefined) {
params[k] = v2;
} else {
// 多个同名参数处理到一个数组中
params[k] = [].concat(params[k], v2);
}
});
return params; //返回这个数组.
}