У меня есть текст и массив тегов. Я ищу способ узнать, содержит ли текст какое-либо слово-триггер в массиве. Если да, напишите кодовое слово тега (второй параметр в массиве).
Есть ли лучший способ сделать это?
var textim = "I need to eat an apple and banna and meat";
var tags = [
["apple","fruit"],
["meat","other"],
["orange","fruit"],
["banna","fruit"],
];
tags.forEach(function(entry) {
if (textim.includes(entry[0])){
console.info(entry[1]);
};
});
Мне нравится. Почему ты спросил?
Преобразуйте массив tags
в карта. Расколотьtextim
пробелом и повторяет слова с Array.forEach()
. Если в tagsMap
есть слово, получите значение слова, а в console.info()
его:
const textim = "I need to eat an apple and banna and meat";
const tags = [
["apple", "fruit"],
["meat", "other"],
["orange", "fruit"],
["banna", "fruit"],
];
const tagsMap = new Map(tags);
textim.split(' ')
.forEach((word) => {
if (tagsMap.has(word)) console.info(tagsMap.get(word));
});
Всегда выполняйте итерацию по вводу (textim) и проверяйте / сравнивайте в ссылочном стеке, но никогда не перебирайте массив / стек ссылок (тегов) и проверяйте ввод, иначе вы в конечном итоге выполните итерацию накладных расходов.
Пример: с вашим текущим исправлением, если у вас есть массив тегов из 100 элементов 1) для вводимого текста из 5 слов - будет повторяться 100 раз. 2) для вводимого текста с 2-мя словами - будет повторяться 100 раз.
textim похож на 1000 слов, а тег был на 500
Предлагаю вам задать этот вопрос на сайте CodeReview - codereview.stackexchange.com