Как сравнить свойства объектов между различными объектами в разных массивах

#javascript #reactjs #fetch #data-manipulation

Вопрос:

Я получаю данные из 2 API, один возвращает данные из 18 разных аэропортов, а другой возвращает рейсы из одного аэропорта в другой (этот API должен быть снабжен идентификатором аэропорта вылета и аэропорта прибытия).

API, который возвращает рейсы, похож на этот вот:

 {
    "data": [
        {
            "id": 64,
            "airlineId": 8,
            "departureAirportId": 5,
            "arrivalAirportId": 2,
            "price": 205.75
        },
        {
            "id": 42,
            "airlineId": 7,
            "departureAirportId": 2,
            "arrivalAirportId": 17,
            "price": 1324.42
        }
    ]
}
 

В то время как API, который возвращает аэропорты, — это один:

 {
    "data": [
        {
            "id": 1,
            "codeIata": "PSA",
            "latitude": 43.6931,
            "longitude": 10.3789
        },
        {
            "id": 2,
            "codeIata": "BLQ",
            "latitude": 44.5357,
            "longitude": 11.2736
        },
        {
            "id": 3,
            "codeIata": "BGY",
            "latitude": 45.6702,
            "longitude": 9.6715
        },
        {
            "id": 4,
            "codeIata": "MXP",
            "latitude": 45.6289,
            "longitude": 8.7183
        },
        {
            "id": 5,
            "codeIata": "TRN",
            "latitude": 45.1934,
            "longitude": 7.6158
        },
        {
            "id": 6,
            "codeIata": "VCE",
            "latitude": 45.5046,
            "longitude": 12.3444
        },
        {
            "id": 7,
            "codeIata": "FCO",
            "latitude": 41.8025,
            "longitude": 12.213
        },
        {
            "id": 8,
            "codeIata": "PSR",
            "latitude": 42.4261,
            "longitude": 14.1793
        },
        {
            "id": 9,
            "codeIata": "NAP",
            "latitude": 40.8819,
            "longitude": 14.2731
        },
        {
            "id": 10,
            "codeIata": "BRI",
            "latitude": 41.1375,
            "longitude": 16.763
        },
        {
            "id": 11,
            "codeIata": "BDS",
            "latitude": 40.6551,
            "longitude": 17.936
        },
        {
            "id": 12,
            "codeIata": "SUF",
            "latitude": 38.9057,
            "longitude": 16.2402
        },
        {
            "id": 13,
            "codeIata": "CTA",
            "latitude": 37.4667,
            "longitude": 15.0639
        },
        {
            "id": 14,
            "codeIata": "PMO",
            "latitude": 38.1813,
            "longitude": 13.0994
        },
        {
            "id": 15,
            "codeIata": "NRT",
            "latitude": 35.7653,
            "longitude": 140.386
        },
        {
            "id": 16,
            "codeIata": "KLX",
            "latitude": 37.0683,
            "longitude": 22.0256
        },
        {
            "id": 17,
            "codeIata": "ALA",
            "latitude": 43.3553,
            "longitude": 77.0447
        },
        {
            "id": 18,
            "codeIata": "PEK",
            "latitude": 40.0725,
            "longitude": 116.5975
        }
    ]
}
 

Мне нужно взять «Аэропорт вылета» и «Аэропорт прибытия» из API рейсов, сверить их с API аэропорта и получить название аэропорта в соответствии с предоставленным идентификатором.
Я пробовал разными способами, но каждый раз заканчивал тем, что выкапывал огромную кроличью нору, и решил просто начать все сначала, не знаю, сколько раз сейчас.

Есть какие-нибудь предложения, как я мог бы это сделать?

Ответ №1:

Это должно решить вашу проблему:

 let flights = {
  "data": [{
      "id": 64,
      "airlineId": 8,
      "departureAirportId": 5,
      "arrivalAirportId": 2,
      "price": 205.75
    },
    {
      "id": 42,
      "airlineId": 7,
      "departureAirportId": 2,
      "arrivalAirportId": 17,
      "price": 1324.42
    }
  ]
};


let airports = {
  "data": [{
      "id": 1,
      "codeIata": "PSA",
      "latitude": 43.6931,
      "longitude": 10.3789
    },
    {
      "id": 2,
      "codeIata": "BLQ",
      "latitude": 44.5357,
      "longitude": 11.2736
    },
    {
      "id": 3,
      "codeIata": "BGY",
      "latitude": 45.6702,
      "longitude": 9.6715
    },
    {
      "id": 4,
      "codeIata": "MXP",
      "latitude": 45.6289,
      "longitude": 8.7183
    },
    {
      "id": 5,
      "codeIata": "TRN",
      "latitude": 45.1934,
      "longitude": 7.6158
    },
    {
      "id": 6,
      "codeIata": "VCE",
      "latitude": 45.5046,
      "longitude": 12.3444
    },
    {
      "id": 7,
      "codeIata": "FCO",
      "latitude": 41.8025,
      "longitude": 12.213
    },
    {
      "id": 8,
      "codeIata": "PSR",
      "latitude": 42.4261,
      "longitude": 14.1793
    },
    {
      "id": 9,
      "codeIata": "NAP",
      "latitude": 40.8819,
      "longitude": 14.2731
    },
    {
      "id": 10,
      "codeIata": "BRI",
      "latitude": 41.1375,
      "longitude": 16.763
    },
    {
      "id": 11,
      "codeIata": "BDS",
      "latitude": 40.6551,
      "longitude": 17.936
    },
    {
      "id": 12,
      "codeIata": "SUF",
      "latitude": 38.9057,
      "longitude": 16.2402
    },
    {
      "id": 13,
      "codeIata": "CTA",
      "latitude": 37.4667,
      "longitude": 15.0639
    },
    {
      "id": 14,
      "codeIata": "PMO",
      "latitude": 38.1813,
      "longitude": 13.0994
    },
    {
      "id": 15,
      "codeIata": "NRT",
      "latitude": 35.7653,
      "longitude": 140.386
    },
    {
      "id": 16,
      "codeIata": "KLX",
      "latitude": 37.0683,
      "longitude": 22.0256
    },
    {
      "id": 17,
      "codeIata": "ALA",
      "latitude": 43.3553,
      "longitude": 77.0447
    },
    {
      "id": 18,
      "codeIata": "PEK",
      "latitude": 40.0725,
      "longitude": 116.5975
    }
  ]
};

const findAirportByID = (airportID) => {
  return airports.data.filter(item => item.id == airportID);
}

flights.data.forEach(flight => {
    let departureAirport = findAirportByID(flight.departureAirportId);
  if(departureAirport[0])
    flight.deparureAirportCode = departureAirport[0].codeIata;
  let arrivalAirport = findAirportByID(flight.arrivalAirportId);
  if(arrivalAirport[0])
    flight.arrivalAirportCode = arrivalAirport[0].codeIata;
});

console.log(flights); 

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

1. Спасибо! Это работает идеально. Мне нужно очень хорошо изучить его, потому что я провел весь день, пытаясь найти решение, а вы нашли его за 3 минуты! Подавлена, но очень благодарна!