Задать вопрос
@dc65k

Как написать функцию создания объекта из строки?

Всем привет. Подскажите, как решить следующую задачу:

Дана строка:
const inData = 'user.name.firstName=Bob&user.name.lastname=Smith&user.favoritecolor=Light%20Blue&experiments.theme=dark';

Необходимо получить объект следующего вида:
{
    'user': {
        'name': {
            'firstName': 'Bob',
            'lastname': 'Smith',
        },
        'favoritecolor': 'Light Blue',
    },
    'experiments': {
        'theme': 'dark',
    }
}
  • Вопрос задан
  • 301 просмотр
Подписаться 1 Простой 2 комментария
Решения вопроса 2
Aetae
@Aetae Куратор тега JavaScript
Тлен
lodash
chain(inData)
  .split(/[&=]/)
  .map(decodeURIComponent)
  .chunk(2)
  .transform((obj, [path, value]) => set(obj, path, value), {})
  .value()
Ответ написан
Комментировать
@Justcoda
const convertQueryToMap = (query) => {
const arrWithoutAmpersand = query.split("&")
return arrWithoutAmpersand.reduce((initialValue, string) => {
const [stringPath, stringValue] = string.split("=")
let object = initialValue
stringPath.split(".").forEach((key, i, arr) => {
if (!object[key]) {
if (typeof stringValue === "string" && !stringValue.length || stringValue === undefined) {
return
} else {
object[key] = i === arr.length - 1 ? decodeURIComponent(stringValue) : {}
}
}
object = object[key]
})
return initialValue
}, {})
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Есть готовые модули для работы с точкоразделённой нотацией. Например set-value

Задача сводится к разбору (адресной) строки на параметры с помощью встроенного URLSearchParams, и построению объекта.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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