解析url参数为对象
最简单版本
javascript
function parseUrlQuery(url) {
const queryString = url.split('?')[1];
if (!queryString) return {};
return queryString.split('&').reduce((acc, param) => {
const [key, value] = param.split('=');
acc[decodeURIComponent(key)] = decodeURIComponent(value || '');
return acc;
}, {});
}
// 测试
const url = 'https://example.com/page?name=John&age=30&city=New%20York';
console.log(parseUrlQuery(url))
处理复杂情况
将相同的键转换为数组
javascript
function parseUrlQuery(url) {
const queryString = url.split('?')[1];
if (!queryString) return {};
return queryString.split('&').reduce((acc, param) => {
const [key, value] = param.split('=');
if (key) {
const decodedKey = decodeURIComponent(key);
const decodedValue = value ? decodeURIComponent(value) : '';
if (acc[decodedKey]) {
// 如果键已存在,转换为数组
if (!Array.isArray(acc[decodedKey])) {
acc[decodedKey] = [acc[decodedKey]];
}
acc[decodedKey].push(decodedValue);
} else {
acc[decodedKey] = decodedValue;
}
}
return acc;
}, {});
}
// 测试
const url = 'https://example.com/page?name=John&age=30&city=New%20York&name=Jane&id=1&id=2';
console.log(parseUrlQuery(url));