Отбор задач, содержащих отдельное слово

Разбейте задачи на слова, приведите их к одному регистру и ищите точное совпадение токена. Примеры с java и ник противоречат требованию отдельных слов.

Короткий ответ

Что ответить на собеседовании

Разбейте задачи на слова, приведите их к одному регистру и ищите точное совпадение токена. Примеры с java и ник противоречат требованию отдельных слов.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо реализовать функцию filterTasks, которая принимает массив строк‑задач и слово‑фильтр, и возвращает только те задачи, где указанное слово встречается как отдельный токен, а не как часть другого слова.

const tasks = [
  "Купить чай",
  "Купить чайник",
  "Позвонить бабушке",
  "Сделать чай с лимоном",
  "Выучить JavaScript"
];

filterTasks(tasks, "чай");   // ["Купить чай", "Сделать чай с лимоном"]
filterTasks(tasks, "java");  // ["Выучить JavaScript"]
filterTasks(tasks, "ник");   // ["Купить чайник"]

Функция должна корректно обрабатывать регистр символов и учитывать границы слов, чтобы исключать совпадения внутри других слов.

Ответ

Разбейте задачи на слова, приведите их к одному регистру и ищите точное совпадение токена. Примеры с java и ник противоречат требованию отдельных слов.

function filterTasks(tasks, word) {
  const token = word.trim().toLocaleLowerCase();
  if (!token) return [];
  return tasks.filter(task => {
    const words = task.toLocaleLowerCase().match(/[\p{L}\p{N}_]+/gu) ?? [];
    return words.includes(token);
  });
}

Здесь словом считается последовательность букв, цифр и подчёркиваний. Для «чай» вернутся две задачи из условия. Для «java» и «ник» результат будет пустым: они являются частями JavaScript и чайник. Если нужны именно результаты последних двух примеров, следует согласовать поиск подстроки вместо поиска слова.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее