@nasvek

Почему includes проверяет вхождения части строки?

Не могу понять почему функция includes сверяет не полную строку, а только ее часть соответственно из-за этого она возвращает ложное true

Для примера:
array_query = ["амулет купить ловец снов", "купить ловец снов в", "купить ловец"];
minus_query = ["купи"];

checkj_2: for (let i = 0; i < array_query.length; i++)
			{
				checkj: for (let j = 0; j < minus_query.length; j++)
					{
						if (array_query[i] != "")
							{
								if (array_query[i].toLowerCase().includes(minus_query[j].toLowerCase())) 
 // Вернет true при j=0, i=0, несмотря на то, что "купи" и "купить" разные слова, то есть он должен возвращать false
									{
										deleted_query.push(array_query[i]);
										array_query[i] = "";
										continue checkj;
									}
							}
					else if (array_query[i] == "")
						{
							continue checkj_2;
						}
					}
			}
  • Вопрос задан
  • 81 просмотр
Пригласить эксперта
Ответы на вопрос 2
@abberati
frontend-разработчик
Потому что includes переводится как «содержит»
Ответ написан
Комментировать
@f_ban
Потому что, includes здесь применяется к срокам, таким образом она ищет вхождение строк. А строка 'купи' является подстрокой всех значений массива array_query.

Судя по всему, вам требуется рудиментальные лексический анализ, а для этого, разделите каждую строку на массив слов (лексем), и уже потом проверяйте, содержит ли массив нужную лексему. Это простейший неоптимизированный вариант алгоритма.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы