从查询字符串 JS 中删除空参数
Delete empty params from query string 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
,是live,所以你不能.delete
进去,否则将跳过下一个键值对 - 因此 .entries
迭代器首先传播到一个新数组。
使用query-string包更安全。
将您的参数定义为对象而不是调用 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)
}
我有这个查询字符串:
"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
,是live,所以你不能.delete
进去,否则将跳过下一个键值对 - 因此 .entries
迭代器首先传播到一个新数组。
使用query-string包更安全。
将您的参数定义为对象而不是调用 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)
}