Разбейте задачи на слова, приведите их к одному регистру и ищите точное совпадение токена. Примеры с 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 и чайник. Если нужны именно результаты последних двух примеров, следует согласовать поиск подстроки вместо поиска слова.