получить полное название страны из аббревиатур стран в Javascript

#javascript #arrays #object

Вопрос:

Итак, у меня есть массив сокращенных названий стран, я пытаюсь получить и отобразить полное название страны в объекте.

 const countries = [
 {
   name:'Argentina',
   border:["NGA", "PAK","CHN"],
 },
 {
   name:'China',
   border:["ARG", "PAK"],
 },
 {
   name:'Nigeria',
   border:['PAK', 'CHN'],
 },
 {
   name:'Pakistan',
   border:['NGA', 'ARG'],
 },
]
 

итак, если я получу доступ к первому индексу массива, имя которого-Аргентина, и границе nga, pak и chn

 const country = countries.find((con) => con.name === "Argentina");
console.log(country.border);
});
 

поэтому я вижу только значения Abbr в консоли, как и ожидалось, что это

 [NGA, PAK, CHN]

 

но на самом деле я хочу чего-то подобного

 [Nigeria, Pakistan, China]
 

Так как я на самом деле регистрирую полное имя страны в консоли с предоставленными объектами, потому что я думал и думал о том, как это сделать, но просто не получаю ссылку на URL-ссылку с данными

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

1. Я бы предложил использовать объект refrence, чтобы превратить abbr vals в полное имя.

2. я получаю данные из конечной точки, и вот как были структурированы данные. Я извлек только некоторые части. Хотя я не понимаю, о чем ты говоришь

Ответ №1:

Сначала вы можете создать dict как

 fetch("https://restcountries.eu/rest/v2/all")
  .then((res) => res.json())
  .then((data) => {
    const dict = data.reduce((acc, curr) => {
      acc[curr.alpha3Code] = curr.name;
      return acc;
    }, {});
    console.log(dict);
  }); 
 /* This is not a part of answer. It is just to give the output fill height. So IGNORE IT */
.as-console-wrapper { max-height: 100% !important; top: 0; } 
 const dict = {
  NGA: "Nigeria",
  PAK: "Pakistan",
  CHN: "China",
  ARG: "Argentina",
};

const countries = [
  {
    name: "Argentina",
    border: ["NGA", "PAK", "CHN"],
  },
  {
    name: "China",
    border: ["ARG", "PAK"],
  },
  {
    name: "Nigeria",
    border: ["PAK", "CHN"],
  },
  {
    name: "Pakistan",
    border: ["NGA", "ARG"],
  },
];

const result = countries.map((o) => dict[o.border[0]]);
console.log(result); 

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

1. данные, которые я получаю, — это список всех стран во всей вселенной, я извлек это только из данных в качестве примера. назначение значений объектов вручную не будет работать.

2. Вы быстры 😉 здорово видеть, насколько похож наш код и насколько мы вовремя отреагировали. Я надеюсь, что это говорит о качестве моего ответа. Мне нравится ваше описание объекта в виде словаря.

3. без lookup этого Ты не сможешь этого сделать.

4. @HR01M8055 Я обновил сообщение ссылкой, из которой получаю свои данные

5. опять же, я только что закончил писать выборку и сокращение, как вы ее опубликовали 😂 хорошие вещи

Ответ №2:

Вы можете отобразить результаты с помощью функции, которая преобразует abbrs в полные имена.

 const countries = [
 {
   name:'Argentina',
   border:["NGA", "PAK","CHN"],
 },
 {
   name:'China',
   border:["ARG", "PAK"],
 },
 {
   name:'Nigeria',
   border:['PAK', 'CHN'],
 },
 {
   name:'Pakistan',
   border:['NGA', 'ARG'],
 },
]

const abrRefrence = {
  CHN: "China",
  PAK: "Pakistan",
  NGA: "Nigeria",
  ARG: "Argentina",
}

const abrToFull = abr => abrRefrence[abr];

const country = countries.find(con => con.name === "Argentina");
console.log(country.border.map(abrToFull)); 

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

1. Я становлюсь похожим на всю страну во вселенной, я извлек эти значения только в качестве примера. идея присвоения значений Abbr их полным именам может оказаться невозможной

2. Вы должны построить объект для взаимосвязи между abr и страной во всей вселенной. Другой вариант-построить логику, чтобы увидеть силу соответствия между abr и названиями стран, но, вероятно, это не требуется для вашего приложения. Вы могли бы легко составить список всех полных и всех abr, но проблема в том, что abr не всегда будет первыми 3 символами полного списка.