Простые массивы строк

Awesomplete изначально проектировалась как минималистичная и при этом гибкая библиотека автодополнения, где базовый сценарий работы строится вокруг максимально простых структур данных. Наиболее прямолинейный и часто используемый формат источника данных — массив строк, в котором каждая строка является отдельным вариантом подсказки.

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

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

const input = document.querySelector("#city");

new Awesomplete(input, {
    list: ["Amsterdam", "Athens", "Auckland", "Berlin", "Brussels", "Copenhagen"]
});

В этом примере массив содержит исключительно строки. Каждая строка становится потенциальным вариантом подсказки. При вводе символов в поле input библиотека выполняет фильтрацию этого массива и отображает только те элементы, которые соответствуют текущему вводу.

Ключевая особенность такого подхода заключается в том, что структура данных не требует преобразования: библиотека сама обрабатывает массив и выполняет поиск по подстроке.

Поведение фильтрации

При использовании простых строковых массивов применяется стандартный алгоритм сопоставления:

  • сравнение происходит по подстроке;
  • регистр символов игнорируется;
  • совпадение может находиться в любой части строки, а не только в начале.

Например, при списке:

["Berlin", "Bern", "Helsinki", "Hamburg"]

ввод ber вернёт:

  • Berlin
  • Bern

Ввод ham вернёт:

  • Hamburg

Это поведение делает базовую конфигурацию универсальной для большинства задач автодополнения без необходимости дополнительной настройки.

Инициализация без дополнительных параметров

Простейший сценарий допускает передачу массива без каких-либо дополнительных опций:

new Awesomplete(document.querySelector("#country"), [
    "Kazakhstan",
    "Kyrgyzstan",
    "Uzbekistan",
    "Tajikistan",
    "Turkmenistan"
]);

В таком случае массив автоматически интерпретируется как список подсказок. Однако более явный способ — использование параметра list, который повышает читаемость и расширяемость конфигурации:

new Awesomplete(document.querySelector("#country"), {
    list: [
        "Kazakhstan",
        "Kyrgyzstan",
        "Uzbekistan",
        "Tajikistan",
        "Turkmenistan"
    ]
});

Второй вариант предпочтителен в проектах среднего и крупного масштаба, так как позволяет добавлять дополнительные настройки без изменения структуры вызова.

Динамическое формирование массива

Массив строк может формироваться программно, что особенно важно при работе с внешними источниками данных:

const rawData = ["Apple", "Apricot", "Avocado", "Banana", "Blueberry"];

const filteredData = rawData.filter(item => item.length > 5);

new Awesomplete(document.querySelector("#fruit"), {
    list: filteredData
});

Здесь предварительная обработка массива выполняется средствами JavaScript, а библиотека получает уже готовый набор строк. Такой подход разгружает логику интерфейса и позволяет контролировать состав подсказок до передачи их в компонент.

Особенности совпадений при частичном вводе

При использовании строковых массивов важно учитывать, что совпадение не ограничивается началом строки. Это приводит к следующим сценариям:

["JavaScript", "TypeScript", "CoffeeScript"]

Ввод script вернёт все три элемента, поскольку подстрока присутствует в каждом значении.

Ввод java вернёт:

  • JavaScript

Такое поведение удобно для широкого поиска, но может быть избыточным в случаях, когда требуется строгое префиксное совпадение. В подобных ситуациях логика фильтрации должна быть расширена на уровне конфигурации или предварительной обработки массива.

Нормализация данных

При работе с простыми строками часто возникает необходимость нормализации:

  • приведение к единому регистру;
  • удаление лишних пробелов;
  • унификация формата отображения.

Пример подготовки массива:

const cities = [
    "  Almaty",
    "Astana ",
    " shymkent",
    "Karagandy"
];

const normalized = cities.map(city => city.trim());

new Awesomplete(document.querySelector("#city"), {
    list: normalized
});

После нормализации данные становятся предсказуемыми для поиска, а вероятность некорректных совпадений снижается.

Использование с заранее известными справочниками

Строковые массивы особенно эффективны в сценариях, где набор значений фиксирован:

  • список стран;
  • перечень языков программирования;
  • категории товаров;
  • набор тегов.

Пример со списком языков:

const languages = [
    "JavaScript",
    "Python",
    "Java",
    "C++",
    "Go",
    "Rust",
    "PHP"
];

new Awesomplete(document.querySelector("#lang"), {
    list: languages
});

Такой подход обеспечивает мгновенную работу без задержек, поскольку отсутствуют асинхронные операции и сложная обработка данных.

Ограничения простых строковых массивов

Несмотря на удобство, использование только строк накладывает ряд ограничений:

  • отсутствует возможность хранения дополнительных данных (id, категории, меток);
  • невозможно различать отображаемое значение и реальное значение выбора;
  • затруднена локализация при многоязычных интерфейсах;
  • нет встроенной поддержки группировки элементов.

Например, если требуется отображать “Moscow” для пользователя, но сохранять код “RU-MOW”, строковый массив становится недостаточным, и требуется переход к объектной структуре.

Контроль порядка элементов

Порядок подсказок в массиве напрямую влияет на отображение. Библиотека не переупорядочивает список глобально, а лишь фильтрует его. Поэтому приоритет элементов задаётся самим массивом:

const priorities = [
    "React",
    "Vue",
    "Angular",
    "Svelte"
];

Если пользователь часто вводит схожие запросы, можно вручную размещать наиболее важные элементы выше, обеспечивая их первоочередное отображение.

Поведение при пустом вводе

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

new Awesomplete(document.querySelector("#search"), {
    list: ["HTML", "CSS", "JavaScript"]
});

При первом символе начинается фильтрация, при полном удалении ввода список скрывается.

Масштабирование простых массивов

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

  • предварительно сокращать массив;
  • использовать серверную фильтрацию;
  • ограничивать количество отображаемых элементов.

Пример ограничения:

const limited = bigArray.slice(0, 100);

new Awesomplete(input, {
    list: limited
});

Роль простых строк в архитектуре автодополнения

Использование строковых массивов формирует базовый уровень архитектуры автодополнения: данные остаются плоскими, предсказуемыми и легко управляемыми. Это делает их оптимальным выбором для начальной интеграции и прототипирования интерфейсов, где сложная логика избыточна.

Такая модель данных обеспечивает прямую связь между источником и отображением без промежуточных трансформаций, что снижает вероятность ошибок и упрощает поддержку кода.