Reactjs - карта данных страны

Я получаю массив кодов стран как реквизит вроде этого: ['en', 'ro', 'da']. Как лучше всего сопоставить его с их именами в таком объекте: {value: 'en', label: 'English}.

У вас есть метка в массиве? если не откуда ваши лейблы придут?

Harish Soni 19.12.2018 12:35

@HarishSoni Я не знаю. Работаем над чужим кодом. У меня есть только кодовые имена.

alliengrv 19.12.2018 12:36

взгляните на этот stackoverflow.com/questions/9907419/…

kiranvj 19.12.2018 12:36

Итак, как вы узнаете, какой код какой метке принадлежит?

Harish Soni 19.12.2018 12:37

Подобно вашему требованию stackoverflow.com/a/11796778/1188322

kiranvj 19.12.2018 12:38
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
5
367
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуйте воспользоваться этим шаблоном:

const myCountries = ['en', 'ro']; 
const data= [{EN: "England"}, {RO: "Romania"}, {DA: "Denmark"}];

const getCountriesOption = () => {
const countriesOptions = data.map(
  country => ({ value: Object.keys(country)[0], label: country[Object.keys(country)[0]] }))
      
  return countriesOptions;
    }
// All options
console.info(getCountriesOption());
// Only my countries
console.info(getCountriesOption().filter(
obj => myCountries.includes(obj.value.toLowerCase())));

Я пробую этот шаблон с const countriesList = countries.all.map(c => ({ [c.alpha2]: c.name })); вместо "en": "English" и т. д., И я всегда получаю None обратно

alliengrv 19.12.2018 13:18

Это непонятно, фрагмент работает безупречно, поэтому вы чего-то упускаете. Если ключ существует, будет возвращено значение. Предоставьте текущую структуру источника данных, и я могу обновить свой фрагмент

Mosè Raguzzini 19.12.2018 13:43
countriesMap = countries.all.map(c => ({ [c.alpha2]: c.name })) возвращает массив объектов, который выглядит следующим образом: {AC: "Ascension Island"}
alliengrv 19.12.2018 13:51

CountryMap = countries.all.map (c => ({значение: c.alpha2, label: c.name}))

Mosè Raguzzini 19.12.2018 13:59

Разве я не должен передать CountryMap, чтобы получить такую ​​страну? const getCountry = (shortName) => (countriesMap)[shortName] || "None"

alliengrv 19.12.2018 14:02

Это зависит от структуры исходных данных. Что у вас есть, сложный массив со всеми данными или только массив коротких кодов, как в вопросе?

Mosè Raguzzini 19.12.2018 14:04

Для примера, над которым я работаю, я просто передаю ['en', 'ro', 'da'], но в будущем мне нужно учитывать все возможные языки, которые будут в библиотеке стран, поэтому я не могу просто использовать 'en': 'English' и т. д., Возможно следующий массив будет ['de', 'en', 'el'], мне нужно передать все страны. Я пытаюсь передать карту стран, но она все еще возвращает "Нет".

alliengrv 19.12.2018 14:09

ваша карта / переключатель getCountry может содержать любое количество ключей. Если вы передадите существующий shortCode, он вернет longCode. Все остальные аспекты вашей реализации зависят от кода, над которым вы работаете, поэтому для получения дополнительной помощи вы должны предоставить рабочий фрагмент.

Mosè Raguzzini 19.12.2018 14:14

Я пытаюсь использовать вашу функцию getCountry, но вместо того, чтобы передавать "en": "English", "ro": "Romania", "da": "Denmark", я передаю const countriesMap = countries.all.map(c => ({ [c.alpha2]: c.name })); следующим образом: const getCountry = (shortName) => (countriesMap)[shortName] || "None"; Когда я пытаюсь запустить getCountry с параметром «AC», я получаю «None» обратно, хотя «AC» существует на CountryMap как {AC: "Ascension Island"} Что я делаю не так?

alliengrv 19.12.2018 14:24

Не могли бы вы предоставить фрагмент, чтобы я мог его скорректировать?

Mosè Raguzzini 19.12.2018 14:27
const languageNames = ['EN', 'DA', 'NO']; const countriesMap = countries.all.map(c => ({ [c.alpha2]: c.name })); const getCountry = (shortName) => (countriesMap)[shortName] || "None"; const countryOptions = languageNames.map( value => ({ value, label: getCountry(value) }) ), страны поступают из библиотеки данных по странам, которая возвращает все страны, как я объяснил, например, {AC: "Ascension Island"} и т. д.
alliengrv 19.12.2018 14:30

Обновите фрагменты, чтобы отразить вашу структуру данных и удалить ненужные шаги

Mosè Raguzzini 19.12.2018 14:50

Другие вопросы по теме