Я получаю массив кодов стран как реквизит вроде этого: ['en', 'ro', 'da']. Как лучше всего сопоставить его с их именами в таком объекте: {value: 'en', label: 'English}.
@HarishSoni Я не знаю. Работаем над чужим кодом. У меня есть только кодовые имена.
взгляните на этот stackoverflow.com/questions/9907419/…
Итак, как вы узнаете, какой код какой метке принадлежит?
Подобно вашему требованию stackoverflow.com/a/11796778/1188322





Попробуйте воспользоваться этим шаблоном:
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 обратно
Это непонятно, фрагмент работает безупречно, поэтому вы чего-то упускаете. Если ключ существует, будет возвращено значение. Предоставьте текущую структуру источника данных, и я могу обновить свой фрагмент
countriesMap = countries.all.map(c => ({ [c.alpha2]: c.name })) возвращает массив объектов, который выглядит следующим образом: {AC: "Ascension Island"}CountryMap = countries.all.map (c => ({значение: c.alpha2, label: c.name}))
Разве я не должен передать CountryMap, чтобы получить такую страну? const getCountry = (shortName) => (countriesMap)[shortName] || "None"
Это зависит от структуры исходных данных. Что у вас есть, сложный массив со всеми данными или только массив коротких кодов, как в вопросе?
Для примера, над которым я работаю, я просто передаю ['en', 'ro', 'da'], но в будущем мне нужно учитывать все возможные языки, которые будут в библиотеке стран, поэтому я не могу просто использовать 'en': 'English' и т. д., Возможно следующий массив будет ['de', 'en', 'el'], мне нужно передать все страны. Я пытаюсь передать карту стран, но она все еще возвращает "Нет".
ваша карта / переключатель getCountry может содержать любое количество ключей. Если вы передадите существующий shortCode, он вернет longCode. Все остальные аспекты вашей реализации зависят от кода, над которым вы работаете, поэтому для получения дополнительной помощи вы должны предоставить рабочий фрагмент.
Я пытаюсь использовать вашу функцию 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"} Что я делаю не так?
Не могли бы вы предоставить фрагмент, чтобы я мог его скорректировать?
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"} и т. д.
Обновите фрагменты, чтобы отразить вашу структуру данных и удалить ненужные шаги
У вас есть метка в массиве? если не откуда ваши лейблы придут?