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.

risultati precisi con .toFixed() Un modo semplice per lanciare comandi personalizzati in Windows

Lascia un commento

Trackback this post  |  Subscribe to the comments via RSS Feed


Categorie

JavaScript String .replace

Archivi