usedjs
Version:
used.js 是一个轻量级小巧的可运行在浏览器中的 JavaScript 函数库
82 lines (81 loc) • 2 kB
text/typescript
export function parse<T = any>(qs: string, sep?: string, eq?: string): T{
const obj = Object.create(null);
if (typeof qs !== 'string' || qs.length === 0 ){
return obj;
}
sep = sep || '&';
eq = eq || '=';
const params = qs.split(sep);
let i = 0;
let l = params.length;
for(;i<l;i++){
let items = params[i].split(eq);
let queryKey = items[0].trim();
let queryVal = '';
if (items.length >= 3){
items.splice(0,1);
let lastIndex = items.length - 1;
items.forEach(function(v,i){
v = v.trim();
if (i === lastIndex){
queryVal += v;
} else {
queryVal += v + eq
}
});
} else {
queryVal = items[1].trim();
}
let cur = obj[queryKey];
if (cur){
if (Array.isArray(cur)){
cur.push(decodeURIComponent(queryVal));
} else {
let temp = cur;
obj[queryKey] = new Array();
obj[queryKey].push(temp);
obj[queryKey].push(decodeURIComponent(queryVal));
}
} else {
obj[queryKey] = decodeURIComponent(queryVal);
}
}
return obj;
}
export function stringify(obj: any, sep?: string, eq?: string): string{
sep = sep || '&';
eq = eq || '=';
if (obj !== null && typeof obj === 'object'){
const keys = Object.keys(obj);
const len = keys.length;
const flast = len - 1;
let fields = '';
let i = 0;
for (;i<len; i++){
let k = keys[i];
let v = obj[k];
let ks = k + eq;
if (Array.isArray(v)){
let vlen = v.length;
let vlast = vlen - 1;
let j = 0;
for (; j < vlen; ++j) {
fields += ks + decodeURIComponent(v[j]);
if (j < vlast){
fields += sep;
}
}
if (vlen && i < flast){
fields += sep;
}
} else {
fields += ks + decodeURIComponent(v);
if (i < flast){
fields += sep;
}
}
}
return fields;
}
return '';
}