Skip to content

解析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));