Заполнение выпадающего списка select только некоторыми значениями из массива в наборе данных json

#javascript #json #ajax

#javascript #json #ajax

Вопрос:

Использование этого ввода json:

 [
    {
        "tableName": "data",
        "attributes": [
            {
                "id": "att1"
            },
            {
                "id": "att2"
            },
            {
                "id": "att3"
            },
            {
                "id": "att8"
            }
        ]
    }
]
  

У меня есть два выпадающих списка выбора, в первом выпадающем списке я получаю имена таблиц из моего файла json, Поэтому в первом выпадающем списке есть значения data, data1, data2 и т. Д., И пользователь выберет таблицу, выбрав ее «Имя таблицы». В моем втором выпадающем списке мне нужны только идентификаторы атрибутов из ранее выбранного имени таблицы из первого выпадающего списка. Я застрял на этой части, поскольку она по-прежнему выполняет итерации по всему набору данных, а не только по атрибутам отдельных данных.
Это неверно, но это то, что у меня есть в настоящее время, оно просто получает первый атрибут для всех моих наборов данных

 $(document).ready(function () {
    var url = "listData.json";
    $.getJSON(url, function (data) {
        console.log(data);
        $('#dropdown-1').append('<option selected="true" disabled>Select Data</option>');
        var i = 0;
        $.each(data, function (index, value) {
            // APPEND OR INSERT DATA TO SELECT ELEMENT.
            $('#dropdown-1').append('<option value>'   value.attributes[i].id   '</option>');
            i  ;
        });
    });
});
  

Ответ №1:

Вы можете использовать .filter для фильтрации вашего массива json на основе значения, которое пользователь выбрал из первого выпадающего списка, в зависимости от этого get required attributes и перебирать его, а затем добавлять параметры с required ids во втором выпадающем списке.

Демонстрационный код :

 //your json data
var data = [{
  "tableName": "data1",
  "attributes": [{
      "id": "att1"
    },
    {
      "id": "att"
    },
    {
      "id": "att3"
    },
    {
      "id": "att5"
    }
  ]
}, {
  "tableName": "data2",
  "attributes": [{
      "id": "att"
    },
    {
      "id": "att2"
    },
    {
      "id": "att3"
    },
    {
      "id": "att8"
    }
  ]
}]
$('#dropdown-1').append('<option selected="true" disabled>Select Data</option>');
var i = 0;
$.each(data, function(index, value) {
  // APPEND OR INSERT DATA TO SELECT ELEMENT.
  $('#dropdown-1').append('<option value='   value.tableName   '>'   value.tableName   '</option>');

});
//on change of 1st dropdown 
$(document).on('change', '#dropdown-1', function() {
  var value = $(this).val(); //get value

  //filter json array
  var attribute = $(data)
    .filter(function(i, n) {
      return n.tableName === value;
    });
  //empty second dropdown
  $('#dropdown-2').html("");
  $('#dropdown-2').append('<option selected="true" disabled>Select attributes</option>');
  //loop through attribute
  $.each(attribute[0].attributes, function(index, value) {
    //append datas
    $('#dropdown-2').append('<option value='   value.id   '>'   value.id   '</option>');


  })
})  
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select id="dropdown-1"></select>

<select id="dropdown-2"></select>