Строка соответствует / включает / существует на карте - PullRequest
0 голосов
/ 27 апреля 2020

Можно ли проверить, есть ли строковое значение в структуре JavaScript Карта и, если это так, принять необходимое значение ключа?

Например:

let string = 'James never fly to Dubai'

let exampleMap = = new Map([
    ['Sasha', ' goes to school'],
    ['James', ' goes to college'],
    ['Kevin', ' goes to work'],
]);

if (string.includes(exampleMap.entries())) { //we get index value of match
    /* and (string) James + (exampleMap[1])goes to college*/
}

На данный момент, я использую этот код:

for (let [value, index] of exampleMap.entries()) {
   if (string.includes(value)) {
      console.log(string + index);
   }
}

Но согласно этой статье и соответствующий ответ для Object там должен быть элегантным, но я не могу понять.

ОБНОВЛЕНО: Я хотел бы поблагодарить всех, кто предлагает свою идею ниже, я отмечаю этот вопрос как ответ, но давайте будем честными Существуют различные способы достижения необходимого результата. И моя оценка «принят как ответ» немного субъективна. Так что для всего сообщества Stackoverflow я считаю, что каждый предложенный вариант будет вознагражден их вкладом.

Ответы [ 3 ]

3 голосов
/ 27 апреля 2020

Используйте forEach для итерации карты и проверки, включен ли ключ в строку

let str = 'James never fly to Dubai'

let exampleMap = new Map([
    ['Sasha', ' goes to school'],
    ['James', ' goes to college'],
    ['Kevin', ' goes to work'],
]);

exampleMap.forEach((value, key) => str.includes(key)&&console.log(str + value))
1 голос
/ 27 апреля 2020

Вы можете преобразовать exampleMap.entries() в массив и затем применить метод массива .some() следующим образом:

let string = 'James never fly to Dubai'

let exampleMap = new Map([
    ['Sasha', ' goes to school'],
    ['James', ' goes to college'],
    ['Kevin', ' goes to work'],
]);

[...exampleMap.entries()].some(([k,v]) => string.includes(k) && console.log(string, v))
1 голос
/ 27 апреля 2020

Чтобы получить O (n) время поиска, .entries() и .includes вам не помогут. Вместо этого вам придется каким-то образом итерировать строку, например, разделение по словам (что, кажется, работает в вашем случае):

 string.split(" ").some(word => exampleMap.has(word))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...