我正在使用查询参数,并被介绍给URLSearchParams
。我正在用它来形成这种要查询的对象,
const x = {
a: 'hello World'
b: 23
c: ''
}
let params = new URLSearchParams(x);
console.log(params.toString()) // a=hello+World&b=23&c=
在这里,我不想拥有c=
,因为它很丑陋,我的API不需要它。
所以,我想要这个结果a=hello+World&b=23
(无空查询字符串)
但是,我在mdn文档上找不到任何内容。
我应该怎么做?
这样做无效,因为它似乎直接突变了params
,从而影响了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());
答案 0 :(得分:2)
您可以遍历键值对并删除具有空值的键:
const x = {
a: 'hello World',
b: '',
c: ''
};
let params = new URLSearchParams(x);
let keysForDel = [];
params.forEach((v, k) => {
if (v == '')
keysForDel.push(k);
});
keysForDel.forEach(k => {
params.delete(k);
});
console.log(params.toString());
答案 1 :(得分:0)
我自己做的一种干净方法如下(使用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)
});
答案 2 :(得分:-1)
从JavaScript ES5 +中的查询中删除无用参数的简单方法:
for (let param in query) /* You can get copy by spreading {...query} */
if (query[param] === undefined /* In case of undefined assignment */
|| query[param] === null
|| query[param] === "")
delete query[param];
return new URLSearchParams(query).toString();