URL Query String Params Parser in JavaScript
ES6 vanilla version
"use strict";
/**
*
* @author xgqfrms
* @license MIT
* @copyright xgqfrms
* @created 2020-08-01
* @modified
*
* @description
* @difficulty Easy Medium Hard
* @complexity O(n)
* @augments
* @example
* @link https://www.nowcoder.com/practice/a3ded747e3884a3c86d09d88d1652e10?tpId=2&&tqId=10852&rp=1&ru=/ta/front-end&qru=/ta/front-end/question-ranking
* @link https://developer.mozilla.org/en-US/docs/Web/API/Location
* @link https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams
* @solutions
*
*/
const log = console.log;
function getUrlParam(sUrl, sKey) {
// const log = console.log;
// const url = `http://www.xgqfrms.xyz?key=1&key=2&key=3&test=4#hehe`;
const url = sUrl.slice(sUrl.indexOf(`?`) + 1, sUrl.indexOf(`#`));
const searchParams = url.split(`&`).reduce((obj, item) => {
const [k, v] = item.split(`=`);
if(!obj[k]) {
obj[k] = [v];
} else {
obj[k].push(v);
}
return obj;
}, {});
if(sKey) {
if(searchParams[sKey]) {
const keys = searchParams[sKey];
return keys.length > 1 ? keys : keys[0];
} else {
return "";
}
} else {
return searchParams;
}
}
Web API version
"use strict";
/**
*
* @author xgqfrms
* @license MIT
* @copyright xgqfrms
* @created 2020-08-01
* @modified
*
* @description
* @difficulty Easy Medium Hard
* @complexity O(n)
* @augments
* @example
* @link https://www.nowcoder.com/practice/a3ded747e3884a3c86d09d88d1652e10?tpId=2&&tqId=10852&rp=1&ru=/ta/front-end&qru=/ta/front-end/question-ranking
* @link https://developer.mozilla.org/en-US/docs/Web/API/Location
* @link https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams
* @solutions
*
*/
const log = console.log;
function getUrlParam(sUrl, sKey) {
const log = console.log;
const a = document.createElement('a');
// node.js & ReferenceError: document is not defined
a.href = sUrl;
// a.href = `http://www.xgqfrms.xyz?key=1&key=2&key=3&test=4#hehe`;
const searchParams = new URLSearchParams(a.search);
if(sKey) {
if(searchParams.has(sKey)) {
const keys = searchParams.getAll(sKey);
return keys.length > 1 ? keys : keys[0];
} else {
return "";
}
} else {
const obj = {};
for (const item of searchParams) {
const [k, v] = item;
obj[k] = v;
}
return obj;
}
}