@ivan_kholodov

Как параметры адресной строки превратить в объект?

Есть строка:

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]))]
    }
  }
  • Вопрос задан
  • 184 просмотра
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Array
  .from(new URLSearchParams(str))
  .reduce((acc, [ k, v ]) => (
    k.endsWith('[]')
      ? (acc[k.slice(0, -2)] ??= []).push(v)
      : acc[k] = v,
    acc
  ), {})
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы