Da querystring a object (e viceversa) con jQuery e Underscore
22 Maggio 2018 at 09:59 Lascia un commento
Se state usando sia jQuery che Underscore, sappiate che è possibile convertire una querystring in un oggetto e viceversa con poche righe di codice.
Attualmente non esiste uno standard per la gestione degli array in HTTP GET: dipende ad esempio dai linguaggi e dai framework in uso. Qui vengono trattati PHP e JavaScript ES6, e viene considerato soltanto il tipo di array più semplice possibile che sia gestibile sia da PHP che da JavaScript.
Da query string a object
const str1 = "a=1&b=2"; // full URL is valid too
const params = new URLSearchParams(str1);
const obj = _.object(Array.from(params.entries()));
// {a: 1, b: 2}
const str2 = "a=1&b[]=2&b[]=3";
const params = new URLSearchParams(str1);
const obj = [...params].reduce((o, [k, v])=> {
const _k = k.replace(/\[\]$/, '');
return {...o, [_k]: k.match(/\]$/) ? [...(o[_k] || []), v] : v};
}, {});
// {a: 1, b: [2, 3]}
Da object a query string
const obj = {a: 1, b: [2, 3]};
const params = new URLSearchParams(obj);
const str1 = (_obj => {
const parse = (arr, inArray) => arr.map(entry => {
let k, v;
if (Array.isArray(entry)) {
k = entry[0];
v = entry[1];
if (Array.isArray(v)) return parse(v, k).join('&');
} else {
v = entry;
}
return `${k||inArray}${inArray?'[]':''}=${encodeURIComponent(v)}`;
});
return parse(Object.entries(_obj)).join('&');
})(obj)
;
// "a=1&b=2%2C3" -> a=1&b=2,3
const str2 = $.param(obj);
// "a=1&b%5B%5D=2&b%5B%5D=3" -> "a=1&b[]=2&b[]=3"
Entry filed under: Scripting.
Trackback this post | Subscribe to the comments via RSS Feed