NEKOtb
@NEKOtb

Как обратиться к объекту с параметром имея его название в виде строки?

Приветствую всех.
Возник такая проблема имеется несколько объектов с параметрами хранящийся в JSON файле, и также есть название нужного объекта и параметра в строковой переменной вида "объект.параметр"

Нужно обратиться к параметру для получения его значения.
Считав JSON я присвоил его переменной:
let TypeMenu = "proficiency.languages"

let characterData
const fResult = await fetch('/default_data/Character.json')
  .then((res) => res.json())
  .then((data) => {
    characterData = data.characterData
  })
console.log(characterData[TypeMenu])

структура JSON следующая:
{
  "characterData": {
    ......
    "proficiency": {
      "languages": [
         .....
      ],
   },
   .....
}


В общем в консоль надо вывести
characterData.proficiency.languages

Но проблема в том что в квадратные скобки нельзя подставить как бы сразу два параметра через точку то есть вот так:
characterData[proficiency.languages]
Вначале подумал что возможным решением можно бы стать разделение параметров:
characterData[proficiency][languages]
Но также в JSON файле есть и другие объекты у которых нету второго параметра а оставлять пустой вторые квадратные скобки нельзя.

В общем прошу помощи в этом вопросе.

P.S. Также извиняюсь за возможно странный текст, не сплю уже вторые сутки.
  • Вопрос задан
  • 125 просмотров
Решения вопроса 1
Elaryks
@Elaryks
Аналогичная функция есть в lodash. Можете взять из исходников или найти какую-либо другую реализацию. Что-нибудь такое:

const getPropByPath = (object, path) => {
    const _path = Array.isArray(path) ?
        path :
        path.split('.');
    if (object && _path.length) return getPropByPath(object[_path.shift()], _path);
    return object;
};

const obj = {
    a: {
        b: 1,
        c: {
            d: 2
        }
    }
}

getPropByPath(obj, 'a.b'); // 1
getPropByPath(obj, 'a.c.d'); // 2
getPropByPath(obj, 'a.c'); // { d: 2 }
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Разбить строку по точке и в цикле пройти до нужного элемента JSON.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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