Skip to content

Instantly share code, notes, and snippets.

@sujeetkv
Last active December 2, 2018 19:28
Show Gist options
  • Save sujeetkv/b19b4b46521e1ac789cc6b9a2645f83d to your computer and use it in GitHub Desktop.
Save sujeetkv/b19b4b46521e1ac789cc6b9a2645f83d to your computer and use it in GitHub Desktop.
jQuery.deparam(): parse query string params into object.
/**
* jQuery.deparam()
* @author Sujeet Kumar <sujeetkv90@gmail.com> https://github.com/sujeetkv
*
* @param string queryString (params string)
* @param boolean coerce (force type conversion)
*/
(function ($) {
$.deparam = function (queryString, coerce) {
queryString = ('' + queryString).replace(/^\?/, '');
var re = /([^&=]+)=?([^&]*)/g,
m,
params = {},
coerceTypes = {'true': !0, 'false': !1, 'null': null},
decode = function (str) {
return decodeURIComponent(str.replace(/\+/g, '%20'));
};
if (queryString) {
while (m = re.exec(queryString)) {
var k = decode(m[1]),
v = decode(m[2]),
curr = params;
if (coerce) {
v = !isNaN(v) ? +v : (v === 'undefined' ? undefined : (coerceTypes[v] ? coerceTypes[v] : v));
}
var keys = k.split('][');
var keysLast = keys.length - 1;
if (/\[/.test(keys[0]) && /\]$/.test(keys[keysLast])) {
keys[keysLast] = keys[keysLast].replace(/\]$/, '');
keys = keys.shift().split('[').concat(keys);
keysLast = keys.length - 1;
}
if (keysLast) {
for (var i = 0; i <= keysLast; i++) {
k = (keys[i] === '') ? curr.length : keys[i];
curr = curr[k] = (i < keysLast) ? curr[k] || (keys[i+1] && isNaN(keys[i+1]) ? {} : []) : v;
}
} else if (params[k]) {
if (Object.prototype.toString.call(params[k]) === '[object Array]') {
params[k].push(v);
} else {
params[k] = [params[k], v];
}
} else {
params[k] = v;
}
}
}
return params;
};
})(jQuery);
var obj = $.deparam('a=1&b[]=2&b[]=3&c=sujeet+abc&arc=true');
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment