query-string icon indicating copy to clipboard operation
query-string copied to clipboard

Is there a way to get the values always inside arrays, even for single values?

Open cbdeveloper opened this issue 5 years ago • 4 comments

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

cbdeveloper avatar Dec 19 '19 16:12 cbdeveloper

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.

sindresorhus avatar Jan 16 '20 15:01 sindresorhus

Or in your case, you could use a less ambiguous format like {arrayFormat: 'bracket'}.

sindresorhus avatar Jan 16 '20 15:01 sindresorhus

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

alantanlc avatar May 01 '20 17:05 alantanlc

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.

DV8FromTheWorld avatar Sep 25 '20 16:09 DV8FromTheWorld