Skip to content

Instantly share code, notes, and snippets.

@rfprod
Last active April 22, 2017 15:42
Show Gist options
  • Save rfprod/d48684d4d2e5b6c2ee4cfaad6d679e81 to your computer and use it in GitHub Desktop.
Save rfprod/d48684d4d2e5b6c2ee4cfaad6d679e81 to your computer and use it in GitHub Desktop.
URL Query To Object
function queryToObject(query) {
if (query === '') { return {}; }
let params = query.split('&');
// console.log(params);
let output = {};
params.forEach(param => {
const keys = param.split('=')[0].split('.');
// console.log('keys:', keys);
keys.forEach((key, index, array) => {
const currentItem = function() {
let itm = output;
for (let i = 0; i < index; i++) {
itm = itm[array[i]];
}
return (index === 0) ? output : itm;
};
// console.log('currentItem:', currentItem());
if (currentItem().hasOwnProperty(key)) {
// console.log('has');
} else {
// console.log('does not have');
let itm = output;
for (let i = 0; i < index; i++) {
itm = itm[array[i]];
}
itm[key] = (index < array.length - 1) ? {} : decodeURIComponent(param.split('=')[1]);
}
});
});
return output;
}
// TEST
let query = 'a.a=zi&a.b=ziii&c=ENT%20TEST';
let testResult = {
'a': {
'a': 'zi',
'b': 'ziii'
},
'c': 'ENT TEST'
};
const res = queryToObject(query);
if (res = testResult) {
console.log('success');
console.log('queryToObject(query) result:', res, ' <equals> testResult:', testResult);
} else {
console.log('fails');
console.log('queryToObject(query) result:', res, ' <not equals> testResult:', testResult);
}

URL Query To Object

Function queryToObject converts url query to object.

Query: a.a=1&a.b=2&c=3

Object: { a { a: 1, b: 2 }, c: 3 }

A script by V.

License.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment