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.
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); | |
} |