一行代码实现 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
、空值、+
符号等情况未考虑在内。
</>