Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Remove keys with empty or null values in qs.stringify when constructing query params in URL

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?

like image 619
scriobh Avatar asked Sep 03 '26 21:09

scriobh


2 Answers

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 }))}`;
like image 93
Aplet123 Avatar answered Sep 06 '26 12:09

Aplet123


qs package added skipNulls option since v5.1.0

To completely skip rendering keys with null values, use the skipNulls flag:

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="
like image 43
slideshowp2 Avatar answered Sep 06 '26 11:09

slideshowp2



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!