Je travaillais avec les paramètres de requête et j'ai été présenté à URLSearchParams
. Je l'utilise pour former ce type d'objet à interroger,
const x = {
a: 'hello World'
b: 23
c: ''
}
let params = new URLSearchParams(x);
console.log(params.toString()) // a=hello+World&b=23&c=
Ici, je ne veux pas avoir ça c=
, comme c'est moche, et mon API n'en a pas besoin.
Donc, je veux ce résultat a=hello+World&b=23
(sans chaîne de requête vide) mais, je n'ai rien trouvé sur les documents MDN.
Comment suis-je censé faire ça?
Faire cela ne fonctionne pas, car il semble directement muté le params
qui affecte le forEach
:
const x = {
a: 'hello World',
b: '',
c: ''
};
let params = new URLSearchParams(x);
params.forEach((v, k) => { // never reaches `c`
console.log(k, ' => ', v)
if (v == '')
params.delete(k);
});
console.log(params.toString());
Un chemin propre je le fais moi-même est le suivant (en utilisant Lodash):
import omitBy from 'lodash/omitBy';
import isEmpty from 'lodash/isEmpty';
const x = {
a: 'hello World'
b: 23
c: ''
}
const params = new URLSearchParams(omitBy(x, isEmpty));
// mixing other sets
const params = new URLSearchParams({
otherParam: 'foo',
...omitBy(x, isEmpty)
});