let str = '?name[]=Ivan&name[]=Oleg&page=1&number=5';
{
name: ['Ivan', 'Oleg'],
page: 1,
number: 5
}
name
удалены []
, значения собрались в массив.const regExp = /\[\]$/;
const paramsName = new URLSearchParams(str);
let result = []
for (const k of paramsName.keys()) {
if (regExp.test(k)) {
let one = paramsName.getAll(k);
k.replace('[]', '');
result = [ ...result,
Object.fromEntries(Object.entries(paramsName).map(([key]) => [key: k, one]))]
} else {
let two = paramsName.get(k);
result = [...result,
Object.fromEntries(Object.entries(paramsName).map(([key]) => [key: k, two]))]
}
}
const obj = [...str.matchAll(/([^?&]+)=([^&]+)/g)]
.reduce((acc, [ , k, v ]) => (
k.endsWith('[]')
? (acc[k.slice(0, -2)] ??= []).push(v)
: acc[k] = v,
acc
), {});
const params = new URLSearchParams(str);
const reg = /\[\]$/;
const obj = Object.fromEntries(Array.from(
new Set(params.keys()),
n => [
n.replace(reg, ''),
params[reg.test(n) ? 'getAll' : 'get'](n),
]
));
const obj = str.split('?').pop().split('&').reduce((acc, n) => {
let [ k, v ] = n.split('=');
const isArr = k.slice(-2) === '[]';
k = k.substring(0, k.length - isArr * 2);
const target = (isArr ? (acc[k] = acc[k] || []) : acc);
target[isArr ? target.length : k] = v;
return acc;
}, {});