В Choices.js сортировка элементов списка управляется набором параметров конфигурации, которые определяют порядок отображения доступных опций, выбранных значений и результатов поиска. Механизм сортировки тесно связан с поисковым алгоритмом и внутренней структурой данных, поэтому влияет не только на визуальный порядок, но и на поведение выпадающего списка в разных состояниях компонента.
Параметр shouldSort определяет, будет ли Choices.js
выполнять автоматическую сортировку элементов списка.
Тип: boolean По
умолчанию: true
При включённом значении true элементы сортируются
автоматически при инициализации и при обновлении набора данных.
Сортировка применяется к массиву choices, а также может
затрагивать отображение результатов поиска.
Пример базовой конфигурации:
const example = new Choices('#example', {
shouldSort: true
});
При shouldSort: false порядок элементов полностью
определяется исходной структурой массива или DOM-элементами
<option> / <select>, без
дополнительной перестановки.
const example = new Choices('#example', {
shouldSort: false
});
Отключение сортировки используется в случаях, когда важен строгий порядок данных: иерархические списки, формы с фиксированными значениями, зависимые селекты.
Параметр sortFn задаёт пользовательскую функцию
сортировки, позволяющую полностью переопределить логику сравнения
элементов.
Тип: function
Сигнатура функции:
(a, b) => number
или расширенный вариант, который используется внутри Choices.js:
(a, b, { value, label }) => number
Функция должна возвращать:
a должен идти раньше
ba должен идти позже
b0, если порядок равнозначенПример сортировки по алфавиту по полю label:
const example = new Choices('#example', {
shouldSort: true,
sortFn: (a, b) => {
return a.label.localeCompare(b.label);
}
});
Сортировка по длине строки:
const example = new Choices('#example', {
sortFn: (a, b) => {
return a.label.length - b.label.length;
}
});
При использовании sortFn стандартная сортировка
полностью заменяется, включая поведение при поиске, если явно не
переопределена дополнительная логика.
Комбинация параметров определяет итоговое поведение:
shouldSort: false и sortFn задан — функция
не применяется, сортировка отключенаshouldSort: true и sortFn задан —
применяется пользовательская логикаshouldSort: true и sortFn не задан —
используется встроенная сортировка Choices.jsЭто позволяет управлять как фактом сортировки, так и её алгоритмом.
Choices.js использует поисковый механизм, основанный на сопоставлении строк и ранжировании совпадений. После выполнения поиска результаты могут быть дополнительно отсортированы.
При включённом shouldSort порядок может изменяться после
фильтрации, что влияет на отображение совпадений в выпадающем
списке.
Типичный сценарий:
Для случаев, когда важно сохранить релевантность поисковой выдачи, часто отключают сортировку:
const example = new Choices('#example', {
shouldSort: false
});
Choices.js работает не только с простыми строками, но и с объектами вида:
{
value: 'us',
label: 'United States',
selected: false,
disabled: false
}
При использовании sortFn доступ к полям объекта
позволяет строить более сложные правила:
const example = new Choices('#example', {
sortFn: (a, b) => {
if (a.selected && !b.selected) return -1;
if (!a.selected && b.selected) return 1;
return a.label.localeCompare(b.label);
}
});
Такой подход позволяет закреплять выбранные элементы выше остальных, сохраняя при этом упорядочивание внутри групп.
При одинаковых значениях ключа сортировки важно учитывать стабильность результата. Встроенная сортировка не всегда гарантирует стабильный порядок при равных значениях, поэтому при необходимости используется дополнительный критерий:
const example = new Choices('#example', {
sortFn: (a, b) => {
const primary = a.label.localeCompare(b.label);
if (primary !== 0) return primary;
return a.value.localeCompare(b.value);
}
});
Добавление вторичного ключа предотвращает «скачущий» порядок элементов при повторных рендерах.
При использовании групп (optgroup) порядок может
определяться как внутри группы, так и между группами. Choices.js
применяет сортировку к элементам внутри каждой группы отдельно.
Пример поведения:
sortFn или
встроенной логикеПример конфигурации:
const example = new Choices('#example', {
shouldSort: true,
sortFn: (a, b) => a.label.localeCompare(b.label)
});
В этом случае каждая группа сохраняет структуру, но содержимое упорядочивается по алфавиту.
Сортировка в Choices.js используется не только для эстетического упорядочивания, но и для управления логикой интерфейса:
sortFnКомбинация параметров позволяет строить предсказуемое поведение списка даже при сложных сценариях динамической загрузки и фильтрации данных.