Делаю подсказку при наборе текста:
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 комбинаций
Помимо громадного количества комбинаций вылезает ещё проблема этой самой подсказки. Например по запросу "моск" будет вылезать подсказка "офисная мебель в москве". Ничего страшного, конечно, но хотелось бы видеть вводимое слово на первом месте, можно его конечно передвинуть в начало строки, но не всегда это выглядит нормально: "москве офисная мебель в", значит нужно переносить с предлогом: "в москве офисная мебель". Далее на горизонте уже маячит проблема того, что вся подсказка будет забита каким то мусором, в котором что то там в конце строки совпало.
В общем, тут я понял что изобретаю велосипед и решил спросить совета.