FED

©FrontEndDev.org
2015 - 2024
web@2.22.0 api@2.20.0

一行代码实现 querystring parse

querystring

querystring 指的是 url 上?符号后面、#符号前面的的字符串。一串示例的 querystring :

a=1&b=2&c=3&c=4

parse

方法1

var parse = function (querystring) {
    // 1. 按 & 符号分隔开
    var list = querystring.split('&');
    var ret = {};

    list.forEach(function (item) {
        // 2. 按 = 符号分隔开
        var slices = item.split('=');
        var key = slices[0];
        var val = slices[1];

        // 3. 如果是多值
        if (ret[key]) {
            ret[key] = Array.isArray(ret[key]) ? ret[key] : [ret[key]];
            ret[key].push(val);
        } else {
            ret[key] = val;
        }
    });

    return ret;
};

方法2

var parse = function (querystring) {
    var ret = {};
    var reg = /([^&]*)=([^&]*)/g;
    var matches;

    while ((matches = reg.exec(querystring))) {
        var key = matches[1];
        var val = matches[2];
		
        // 如果是多值
        if (ret[key]) {
            ret[key] = Array.isArray(ret[key]) ? ret[key] : [ret[key]];
            ret[key].push(val);
        } else {
            ret[key] = val;
        }
    }

    return ret;
};

即:

parse('a=1&b=2&c=3&c=4')
// => {"a":"1", "b":"2", "c":["3", "4"]}

注:文章代码仅为示例,如decodeURIComponent、空值、+符号等情况未考虑在内。