query-string
query-string copied to clipboard
Is there a way to get the values always inside arrays, even for single values?
Is there a way to make sure that all parsed values will be inside arrays, even if they're single values?
I mean
Search string: ?foo1=bar1&foo2=bar1,bar2
queryString.parse(props.location.search,{arrayFormat: 'comma'});
I'm getting:
{
foo1: bar1,
foo2: [ bar1,bar2 ]
}
And I would like to always get:
{
foo1: [ bar1 ], // Single value inside array always
foo2: [ bar1,bar2 ]
}
Is it possible?
This would help me to verify if a filter is present on the string. I would check the indexOf
for the array, instead of checking if it's an array first, and handling it differently if it's a single values. In my case, all of my filters allow multiple choices, hence they can always be inside arrays.
Thanks
There's currently no way to do this. We need a way to make it unambiguous. Maybe introduce some kind of schema functionality, where you can define the type of some or all keys.
Or in your case, you could use a less ambiguous format like {arrayFormat: 'bracket'}
.
One way to work around this for now could be like this. @cbdeveloper
values = queryString.parse(props.location.search,{arrayFormat: 'comma'})
if(!Array.isArray(values.foo1) {
values.foo1 = [values.foo1]
}
or
values = queryString.parse(props.location.search,{arrayFormat: 'comma'})
values.foo1 = !Array.isArray(values.foo1) ? [values.foo1] : values.foo1
If you're still wanting to use the condensed format of comma
while achieving support for empty arrays, an explicit format like the proposal for arrayFormat: bracket-separator
might be able to achieve that.