解析URL 将queryString字符串返回一个对象

442 阅读1分钟

将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"));

代码实现如下:

anli.png