Показать сообщение отдельно
  #1 (permalink)  
Старый 09.12.2014, 19:43
Аватар для PesBarbos
Интересующийся
Отправить личное сообщение для PesBarbos Посмотреть профиль Найти все сообщения от PesBarbos
 
Регистрация: 05.10.2014
Сообщений: 10

Подсказка при наборе текста
Делаю подсказку при наборе текста:

arr - массив с подсказками, например ["мебель"]
value - строка с запросом пользователя, например "меб"

for (var i = 0; < arr.length; i++) // перебираем массив
    if (value == arr[i].substr(0, value.length)) // ищем совпадение
        // выводим подсказку "мебель"


Для запросов и элементов состоящих из одного слова это работает отлично, но есть же ещё и словосочетания.

Например, arr = ["мебель офисная"], по запросу "меб" найдёт, но по запросу "офисн" не найдёт.

Ок, думаю, надо значит элементы-словосочетания пробелом в новый массив дробить и производить поиск уже в этом новом массиве.

arr2 = ["мебель", "офисная"]

Так и по "меб" найдёт и по "офисн" тоже. А по запросам "мебель офисная" и "офисная мебель" не найдёт!

Значит, думаю, нужно их добавить:

arr2 = ["мебель", "офисная", "офисная мебель", "мебель офисная"]

Но тогда отдельные то слова мне зачем?

В итоге получается что словосочетания нужно дробить на отдельные слова и перебирать их в новом массиве во всех возможных вариантах:

arr2 = ["офисная мебель", "мебель офисная"]

А если не 2, а 3 слова?

3 слова - 6 комбинаций
4 слова - 24 комбинаций
5 слов - 120 комбинаций
6 слов - 720 комбинаций

Помимо громадного количества комбинаций вылезает ещё проблема этой самой подсказки. Например по запросу "моск" будет вылезать подсказка "офисная мебель в москве". Ничего страшного, конечно, но хотелось бы видеть вводимое слово на первом месте, можно его конечно передвинуть в начало строки, но не всегда это выглядит нормально: "москве офисная мебель в", значит нужно переносить с предлогом: "в москве офисная мебель". Далее на горизонте уже маячит проблема того, что вся подсказка будет забита каким то мусором, в котором что то там в конце строки совпало.

В общем, тут я понял что изобретаю велосипед и решил спросить совета.
Ответить с цитированием