从查询字符串JS中删除空参数



我有这个查询字符串:

"paymentMethod=1&fullname=&persona=&companyName=&countryName=&email=&totalCameras=&camerasOwned=&cameraShares=&snapmailCount=&sessionCount=&createdAtDate=&lastLoginAtDate=&telephone=&sort=created_at%7Cdesc&limit=50&page=1"

和我试图删除所有空参数,并使其为:

"paymentMethod=1&sort=created_at%7Cdesc&limit=50&page=1"

我采取了这样的方法:

let searchParams = Object.fromEntries(new URLSearchParams(queryString))
let filteredParams = Object.fromEntries(
Object.entries(searchParams).filter(([_, value]) => value != "")
)
console.log(new URLSearchParams(filteredParams).toString())
console.log(searchParams)

但我不确定这一点,使用new URLSearchParams两次,这是一个更好的和正确的方法吗?

请指教。

功能较差,但您可以创建单个URLSearchParams对象,然后迭代它和具有空值的.delete键:

const queryString = "paymentMethod=1&fullname=&persona=&companyName=&countryName=&email=&totalCameras=&camerasOwned=&cameraShares=&snapmailCount=&sessionCount=&createdAtDate=&lastLoginAtDate=&telephone=&sort=created_at%7Cdesc&limit=50&page=1"
const params = new URLSearchParams(queryString);
[...params.entries()].forEach(([key, value]) => {
if (!value) {
params.delete(key);
}
});
const cleaned = String(params);
console.log(cleaned);

原生的URLSearchParams.forEach,有点像getElementsByClassName,是活的,所以你不能在里面.delete,否则下一个键值对将被跳过-因此.entries迭代器首先扩展到一个新的数组。

使用查询字符串包更安全。

将参数定义为对象,然后调用stringify方法,它将为您处理undefined和空值

params = {
paymentMethod: 1,
fullname: 'John',
created_at: undefined,
test: '',
};
// cleaned object will be "paymentMethod=1&fullname=John"
const cleaned = queryString.stringify(params);
for ([key, value] of searchParams.entries()) {
if (value == '') searchParams.delete(key)
}

最新更新