I'm constructing a URL with query string parsing qs.stringify in which I want only non-empty or non-null values to be present in the URL.
The result I am getting is below:
localhost:3000/user?name=john&age=
But, I don't want the age param to be included in the url as the value for age is null.
Below is an excerpt from my code:
const url = `/user?${qs.stringify({ name, age })}`;
Could anyone please help?
You can make a function using Object.fromEntries and Object.entries to filter out non-null and non-empty values:
function filterNonNull(obj) {
return Object.fromEntries(Object.entries(obj).filter(([k, v]) => v));
}
const url = `/user?${qs.stringify(filterNonNull({ name, age }))}`;
qs package added skipNulls option since v5.1.0
To completely skip rendering keys with
nullvalues, use theskipNullsflag:
var nullsSkipped = qs.stringify({ a: 'b', c: null}, { skipNulls: true });
assert.equal(nullsSkipped, 'a=b');
Don't worry, the qs package supports skip undefined values as well.
console.log(qs.stringify({a: 1, b: undefined}))
// => "a=1"
runkit
But qs does NOT support omitting the below zero values: 0, ''
var qs = require("qs")
console.log(qs.stringify({a:1,b:''})) // "a=1&b="
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With