Можно ли проверить, содержит ли карта JS значение, и вернуть его ключ

Я пытаюсь найти способ просмотреть значение массива Map, чтобы узнать, существует ли оно, если оно возвращает ключ Map в качестве переменной. это немного поставило меня в тупик, так как я не очень много использую javascript.

const map = new Map([
        ["KEY1", ["dummy1","dummy2","dummy3"]],
        ["KEY2", ["dummy4","dummy5","dummy6","dummy7"]],
        ["KEY3", ["dummy8","dummy9"]],
    ]);

так скажем, у меня есть dummy4 как переменная, я хочу посмотреть на карту и увидеть ее там в массиве значений с ключом2 и вернуть ключ в новую переменную жала "KEY2"

но KEY2 не содержит значения key2

Jaromanda X 18.12.2020 03:21

Если вы выполняете много поисковых запросов и вам нужно быстро, подумайте об «инвертировании» структуры. Составьте таблицу формы value => key.

tadman 18.12.2020 03:26

Можете ли вы объяснить, почему вы это делаете? Это полностью противоречит тому, как карта предназначена для использования.

Mulan 18.12.2020 03:26

именно то, что сказал @tadman. если это разовая операция или для целей отладки, это, вероятно, нормально, но если это обычный способ, которым вы ожидаете использовать Карты, или если операция появляется в цикле, вам следует пересмотреть структуру.

Mulan 18.12.2020 03:28

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

hopbop 18.12.2020 03:29
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
602
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Прокрутите записи :

function findValue(map, value) {
    for (const [k, arr] of map.entries()) {
        if (arr.includes(value)) {
            return k;
        }
    }
}

это соответствует требованиям OP, но неэффективно и неестественно использует Map

Mulan 18.12.2020 03:36
Ответ принят как подходящий

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

Основываясь на комментарии, я собираюсь порекомендовать другой способ построения вашей структуры поиска -

const terms =
  [ ["KEY1", ["dummy1","dummy2","dummy3"]]
  , ["KEY2", ["dummy4","dummy5","dummy6","dummy7"]]
  , ["KEY3", ["dummy8","dummy9"]]
  ]
  
const dict =
  new Map(terms.flatMap(([ k, vs ]) => vs.map(v => [ v, k ])))
  
console.info(dict.get("dummy2"))
console.info(dict.get("dummy5"))
console.info(dict.get("dummy7"))
console.info(dict.get("dummy9"))
console.info(dict.get("dummy0"))

Выход -

KEY1
KEY2
KEY2
KEY3
undefined

Это более эффективно, потому что структура карты обеспечивает мгновенный поиск любого значения и не требует полного .entries сканирования —

Map
  { "dummy1" -> "KEY1"
  , "dummy2" -> "KEY1"
  , "dummy3" -> "KEY1"
  , "dummy4" -> "KEY2"
  , "dummy5" -> "KEY2"
  , "dummy6" -> "KEY2"
  , "dummy7" -> "KEY2"
  , "dummy8" -> "KEY3"
  , "dummy9" -> "KEY3"
  }

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