Reputation: 15288
How does one convert string array values into a Javascript array object?
var querystring = 'lang[]=EN&lang[]=FR&type[]=1&type[]=2';
Into:
{
lang: ['EN', 'FR'],
type: ['2']
}
Below my attempt:
let params = new URLSearchParams(decodeURI(querystring));
let entries = params.entries();
let result = {}
for(let entry of entries) { // each 'entry' is a [key, value]
result[entry[0]] = entry[1];
}
return result;
Which results in:
[{
"name": "lang[]",
"value": "EN"
}, {
"name": "lang[]",
"value": "FR"
}, {
"name": "type[]",
"value": "2"
}]
Upvotes: 2
Views: 8135
Reputation: 92440
You should probably test for the []
so your code won't break with entries not ending in []
. You can then slice off the []
so your keys don't include it:
var querystring = 'lang[]=EN&lang[]=FR&type[]=1&type[]=2&test=hello';
let params = new URLSearchParams(decodeURI(querystring));
let entries = params.entries();
let result = {}
for(let entry of entries) { // each 'entry' is a [key, value]
let [key, val] = entry
if (key.endsWith('[]')){ // array
key = key.slice(0,-2); // clean up the key
(result[key] || (result[key] = [])).push(val)
} else {
result[key] = val // normal parameter
}
}
console.log(result)
Upvotes: 3
Reputation: 4057
Simplest version would be to use a library like qs
https://www.npmjs.com/package/qs#parsing-arrays
var withArray = qs.parse('a[]=b&a[]=c');
ressults in
a: ['b', 'c']
Upvotes: 3
Reputation: 877
var querystring = 'lang[]=EN&lang[]=FR&type[]=1&type[]=2';
let params = new URLSearchParams(decodeURI(querystring));
let entries = params.entries();
let result = {}
for(let entry of entries) { // each 'entry' is a [key, value]
var key = entry[0];
var val = entry[1];
if(key in result){
result[key].push(val);
}else{
result[key] = [val];
}
}
console.log(result);
Upvotes: 2