JSFiddle - React, Tailwind, and code Playground
HTML
<script src="https://wzrd.in/standalone/expect@latest"></script>
<body>
</body>
Babel + JSX
const paramObject = (queryParams = window.location.search.substring(1)) => queryParams
.split("&")
.map(str => {
let [key, value] = str.split('=');
return {[key]: decodeURI(value)};
})
.reduce((prev, curr) => Object.assign(prev, curr));
const singleParamTest = () => {
expect(paramObject('test=asdf')).toEqual({test: 'asdf'});
};
const multiParamTest = () => {
expect(paramObject('test=asdf&prime=123')).toEqual({
test: 'asdf',
prime: '123'
});
expect(paramObject('abc=foo&def=%5Basf%5D&xyz=5')).toEqual({abc: "foo", def: "[asf]", xyz: "5"});
};
const emptyParamTest = () => {
expect(paramObject('')).toEqual({});
};
[singleParamTest, multiParamTest].forEach(test => test());
document.body.innerHTML = 'All tests passed';