javascript для фильтрации json и возврата другого значения

#javascript #json

#javascript #json

Вопрос:

У меня есть некоторый javascript:

datasetID устанавливается из значения url.

Я получаю данные в формате json.

   const datasetID = urlParams.get('datasetID')

  var data;
  $.getJSON("json/data.json", function(json){
    data = json;
  });
 

Затем я хочу отфильтровать данные json на основе datasetID, затем извлечь значение, присвоенное другому атрибуту vernacularName , и присвоить ему значение const.

   const record = data.filter(d => d.datasetID === datasetID);
  const vernacularName = 
 

Как далеко я нахожусь? Предложения приветствуются.

пример кода

 [
 {
  "datasetID":"A1"
  "language":"en",
  "accessRights":"CC BY 4.0",
  "vernacularName":"goat"
 }
]
 

Комментарии:

1. может быть, без малейшего представления о том, как выглядят эти данные const vernacularName = filename[0].vernacularName ?? или, возможно, вам нужен массив find вместо этого, если там будет не более одной записи, которая соответствует условию… тогда это было бы const vernacularName = filename.vernacularName

2. добавлен некоторый пример кода для данных

3. а datasetID это уникальный идентификатор поэтому будет возвращена одна запись 1

4. переименовано filename в record так что это имеет больше смысла

5. хорошо … комментарий остается const vernacularName = record[0].vernacularName в силе — если вы не используете array find , то это будет const vernacularName = record.vernacularName

Ответ №1:

Фильтр во внешнем интерфейсе не является хорошим вариантом (допустим data.json , он большой), поэтому, если бы вы могли отфильтровать его во внутреннем интерфейсе перед извлечением. Например, я отправляю ajax-запрос с параметром ID: datasetID :

   const datasetID = urlParams.get('datasetID')

  var data;
  $.ajax({
    type: "POST",
    url: "/getjson",
    dataType: "json",
    success: function (json) {
        record = json
        if (record.length === 1)
            vernacularName = record[0]["vernacularName"]
    },
    error: function (XMLHttpRequest, textStatus, errorThrown) {
        console.log('error');
    },
    data: {
        ID: datasetID
    },
    cache: false
  })
 

Если вы не можете настроить серверную часть, а datasetID уникален, этого должно быть достаточно:

 if (record.length === 1)
            vernacularName = record[0]["vernacularName"]