yanis_kondakov: Кода слишком мало, чтобы что-то анализировать. Напишите что-то более обширное: кредитный калькулятор, трекер времени.
Много непонятных с первого взгляда штук типа str.substr(currentTag.length + 1). Их надо выносить в переменные и давать переменным осмысленное имя. Прочитайте книжку, там много моментов описано. По JS ещё советую Херман Д. "Сила Javascript".
Без скобок плохо читабельно. Либо со скобками, либо в одну строку.
Разбивка на массив:
localStorage.key( i ).split("*")
Делается больше одного раза. Лучше один раз сделать split в переменную и работать с ней. Будет на пару долей секунд работать быстрее :-)
$('#htApp input').autocomplete({
Не уверен, что это уместно в $('#htApp input').keyup.
Проблем с этим нет? В плане переинициализации autocomplete при нажатии клавиш в текстовом поле.
Комментариев, да, многовато :-) Такое количество комментариев обычно для обучения используется. В реальных условиях код так подробно не комментируется.
В остальном, код как код.
По объявлению переменных, возможно будет полезным: let-const.
Алексей Немиро спасибо. В дальнейшем буду следить за этим.
По поводу $('#htApp input').keyup.. Все работает отлично. Может есть конкретный пример, где возможно появление проблемы?
yanis_kondakov: при каждом keyup происходит переинициализация autocomplete, это само по себе вызывает опасения :-)
Я смотрю, вы в autocomplete отдаете только то, что он должен выводить, по сути дублируя механизмы фильтрации данных autocomplete (он должен уметь это делать сам). Вы можете инициализировать autocomplete один раз при загрузке страницы и скормить ему все что есть в localStorage. Тогда обработчик $('#htApp input').keyup будет не нужен.
Алексей Немиро: Да, я понял Вашу идею. Дело в том, что в localStorage при вводе разных значений с одинаковыми ключами, сохраняется только одно (последнее). Чтобы этого не происходило, я добавляю одинаковым ключам *№n" (где n - кол-во повторений ключа). А потом, при формировании массива для автокомплита, удаляю *№n".
По Вашей идее можно передать в autocomplete массив, не содержащий *№n", полностью. И думаю в этом есть смысл. Спасибо.