Home > Back-end >  Graphql response error. String cannot represent value of JSON
Graphql response error. String cannot represent value of JSON

Time:04-30

I have an error here at graphql. I'm trying get an airport name through JSON data. I need a single item which's (name of the airport) but I'm receiving array of items with it's city, country, geolocation and so on. Here's the code I'm trying with...

const getNameOfAirport = (name:any)=>{
    return AIRPORTS.filter((i)=>{
        if(i.iata_code === name){
            return i.name.length;
        }
    })
}

when i run condole.log(getNameOfAirport("BLR")) i'm receiving

[
  {
    name: 'Bangalore',
    city: 'Bangalore',
    country: 'India',
    iata_code: 'BLR',
    _geoloc: { lat: 12.949986, lng: 77.668206 },
    links_count: 195,
    objectID: '3131'
  }
]

I need a response with

Bangalore

Any answers much appreciated. Let me know where i'm doing wrong.

Note: I'm using typescript. It works with JSX as i expected. It's going wrong with TS

CodePudding user response:

Here are multiple mistakes

Well you use Typescript, but put any for your type. Why do you even use typescript at the first place? But thats a other question Here:

const getNameOfAirport = (name:any)=>{
    return AIRPORTS.filter((i)=>{
        if(i.iata_code === name){
            return i.name.length;
        }
    })
}

I see you use AIRPORTS, and its an array. But you dont pass it into the function, so the array is outside the function. Sideeffects are bad. You should avoid that.

Array.filter() is the wrong method i guess. You should probably try .find()

You should also create an interface. Try this:

const getNameOfAirport = (
  airports: Airport[],
  name: string
): string | undefined => {
  return airports.find((airport) => airport.iata_code === name)?.name;
};

interface Airport {
  name: string;
  city: string;
  country: string;
  iata_code: string;
  _geoloc: {
    lat: number;
    lng: number;
  };
  links_count: number;
  objectID: string;
}

Then you call it with:

getNameOfAirport(AIRPORTS, "BLR")

A side note: The name getNameOfAirport is kinda bad naming. I would suggest to use something like getAirportNameByIataCode. By reading the function its pretty clear whats doing.

  • Related