#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 символами полного списка.