@makedonets

Как правильно получить значение json?

Есть форма с несколькими селектами и файл json который имеет примерно такую структуру
{
  "ФИО" : "Иванов Сергей",
  "Адрес" : {
    "Город" : "Москва",
    "Улица" : "Пятницкая",
    "Дом" : "35"
  }
}
{
  "ФИО" : "Сидоров Иван",
  "Адрес" : {
    "Город" : "Питер",
    "Улица" : "Ленина",
    "Дом" : "42"
  }
}

Через getjson подтягиваю данные в первый селект с поля ФИО. Необходимо что бы пользователь во втором селекте мог выбрать любой ключ (город, улица, дом) и в любом другом поле отобразилось значение выбранного ключа у выбранного человека. Как это можно сделать? Получается некоторая зависимость.
  • Вопрос задан
  • 356 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
<select id="person"></select>
<select id="key"></select>
<span id="value"></span>

const data = [
  {
    "ФИО": "Иванов Сергей",
    "Адрес": {
      "Город": "Москва",
      "Улица": "Пятницкая",
      "Дом": "35",
    },
  },
  {
    "ФИО": "Сидоров Иван",
    "Адрес": {
      "Город": "Питер",
      "Улица": "Ленина",
      "Дом": "42",
    },
  },
];


const selects = [
  Select('#person', data.map(n => n['ФИО'])),
  Select('#key', Object.keys(data[0]['Адрес'])),
];

selects.forEach(n => n.addEventListener('change', onChange));


function Select(selector, options) {
  const el = document.querySelector(selector);
  el.append(...options.map(n => new Option(n)));
  el.value = null;
  return el;
}

function onChange() {
  const [ person, key ] = selects.map(n => n.value);
  if (person && key) {
    const value = data.find(n => n['ФИО'] === person)['Адрес'][key];
    document.querySelector('#value').textContent = value;
  }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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