Skip to content

Instantly share code, notes, and snippets.

@solidsnack
Forked from ryoppy/getQueryParams.js
Last active August 29, 2015 14:14
Show Gist options
  • Save solidsnack/aeaf5176cf02796f0539 to your computer and use it in GitHub Desktop.
Save solidsnack/aeaf5176cf02796f0539 to your computer and use it in GitHub Desktop.
Parse query string, accepting multiple parameters
/**
* Parse query string.
* ?a=b&c=d&e=f&e=g to {a: 'b', c: 'd', e: ['f', 'g']}
* @param {String} (optional) queryString
* @return {Object} query params
*/
getQueryParams: function(queryString) {
var query = (queryString || window.location.search).replace(/^[?]/, ''),
result = {};
if (!query) return result;
var pieces = query.split('&');
for (var i = 0, s = pieces[i]; i < pieces.length; s = pieces[++i]) {
var pair = s.split('='),
key = pair[0],
val = pair[1] && decodeURIComponent(pair[1]);
if (key in result) {
var current = result[key];
if (current instanceof Array) {
current.push(val)
} else {
result[key] = [current, val];
}
} else {
result[key] = val;
}
}
return result;
}
// --- Jasmine test
describe('_.getQueryParams', function() {
it('?a=1', function() {
var result = _.getQueryParams('?a=1');
expect(result).toEqual({a: '1'});
});
it('?a=1&b=2', function() {
var result = _.getQueryParams('?a=1&b=2');
expect(result).toEqual({a: '1', b: '2'});
});
it('?a=1&jp=ほげ&en=Hoge', function() {
var result = _.getQueryParams('?a=1&jp=%E3%81%BB%E3%81%92&en=Hoge');
expect(result).toEqual({a: '1', jp: 'ほげ', en: 'Hoge'});
});
it('?a=1&jp=%E3%81%BB%E3%81%92&en=Hoge', function() {
var result = _.getQueryParams('?a=1&jp=ほげ&en=Hoge');
expect(result).toEqual({a: '1', jp: 'ほげ', en: 'Hoge'});
});
it('?a&b=2', function() {
var result = _.getQueryParams('?a&b=2');
expect(result).toEqual({a: 'undefined', b: '2'});
});
it('', function() {
var result = _.getQueryParams('');
expect(result).toEqual({});
});
it('?n=x&n=y', function() {
var result = _.getQueryParams('?n=x&n=y');
expect(result).toEqual({n: ['x', 'y']});
});
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment