Я пытаюсь найти способ просмотреть значение массива Map, чтобы узнать, существует ли оно, если оно возвращает ключ Map в качестве переменной. это немного поставило меня в тупик, так как я не очень много использую javascript.
const map = new Map([
["KEY1", ["dummy1","dummy2","dummy3"]],
["KEY2", ["dummy4","dummy5","dummy6","dummy7"]],
["KEY3", ["dummy8","dummy9"]],
]);
так скажем, у меня есть dummy4 как переменная, я хочу посмотреть на карту и увидеть ее там в массиве значений с ключом2 и вернуть ключ в новую переменную жала "KEY2"
Если вы выполняете много поисковых запросов и вам нужно быстро, подумайте об «инвертировании» структуры. Составьте таблицу формы value => key
.
Можете ли вы объяснить, почему вы это делаете? Это полностью противоречит тому, как карта предназначена для использования.
именно то, что сказал @tadman. если это разовая операция или для целей отладки, это, вероятно, нормально, но если это обычный способ, которым вы ожидаете использовать Карты, или если операция появляется в цикле, вам следует пересмотреть структуру.
Я делаю это таким образом, чтобы искать определенное значение, которое может иметь много терминов, это может быть не лучший способ, которым я придумал, что в основном многие значения могут быть введены на вход, но все они относятся только к одному выходу
Прокрутите записи :
function findValue(map, value) {
for (const [k, arr] of map.entries()) {
if (arr.includes(value)) {
return k;
}
}
}
это соответствует требованиям OP, но неэффективно и неестественно использует Map
Я делаю это таким образом, чтобы искать определенное значение, которое может иметь много терминов, это может быть не лучший способ, которым я придумал, что в основном многие значения могут быть введены на вход, но все они относятся только к одному выходу
Основываясь на комментарии, я собираюсь порекомендовать другой способ построения вашей структуры поиска -
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"
}
но
KEY2
не содержит значенияkey2