Фильтрация массивов является одной из ключевых операций при работе с данными в JavaScript и jQuery. Она позволяет извлекать из коллекции только те элементы, которые соответствуют заданным условиям. В контексте jQuery фильтрация часто применяется как к массивам обычных данных, так и к коллекциям элементов DOM.
.filter()Метод .filter() используется для выборки элементов из
массива или коллекции, удовлетворяющих определённому критерию.
Синтаксис:
$(selector).filter(function(index, element) {
// возвращает true, если элемент должен остаться
});
index — порядковый номер элемента в коллекции.element — текущий элемент DOM.true для элементов, которые
нужно оставить, и false для исключаемых.Пример: фильтрация элементов списка по классу
$('li').filter(function() {
return $(this).hasClass('active');
});
В этом примере выбираются только элементы <li>,
которые имеют класс active.
Хотя jQuery предназначен в первую очередь для работы с DOM, методы
фильтрации можно применять и к обычным массивам данных. Метод
$.grep() специально предназначен для этих целей.
Синтаксис:
$.grep(array, function(element, index) {
// возвращает true, если элемент должен остаться
}, [invert]);
array — массив, который нужно отфильтровать.element — текущий элемент массива.index — индекс элемента в массиве.invert (необязательный) — логическое значение. Если
true, возвращаются элементы, для которых функция вернула
false.Пример: фильтрация чисел больше 10
var numbers = [5, 12, 8, 130, 44];
var filtered = $.grep(numbers, function(n) {
return n > 10;
});
// filtered = [12, 130, 44]
Пример: использование параметра invert
var filtered = $.grep(numbers, function(n) {
return n > 10;
}, true);
// filtered = [5, 8]
Здесь invert: true инвертирует условие, возвращая
элементы, не удовлетворяющие исходному критерию.
Часто необходимо фильтровать элементы не только по атрибутам, но и по
текстовому содержимому. Для этого применяются комбинации
.filter() и методов доступа к содержимому, таких как
.text().
Пример: выбор элементов списка, содержащих определённое слово
$('li').filter(function() {
return $(this).text().indexOf('JavaScript') !== -1;
});
Результатом будет коллекция <li>, в которых
встречается текст JavaScript.
Методы фильтрации могут быть объединены с другими методами jQuery для построения цепочек вызовов. Например, можно сначала выбрать элементы, а затем применить к ним стили или события.
Пример: подсветка активных элементов с определённым текстом
$('li').filter('.active').filter(function() {
return $(this).text().includes('Важно');
}).css('color', 'red');
В этом примере сначала выбираются элементы с классом
active, затем среди них выбираются только те, которые
содержат слово Важно, и им присваивается красный цвет
текста.
.filter() применяется к коллекциям jQuery,
которые уже являются объектами с ссылками на DOM-элементы. Он эффективен
для небольших и средних наборов данных, но для огромных массивов
элементов DOM следует учитывать возможные накладные расходы.$.grep() оптимизирован для работы с обычными
массивами JavaScript и может быть быстрее при работе с большими
массивами чисел или строк..filter() и
$.grep()| Метод | Используется с | Возвращает | Особенности |
|---|---|---|---|
.filter() |
Коллекция jQuery | Новая коллекция jQuery | Работает с DOM, поддерживает цепочки вызовов |
$.grep() |
Массивы JavaScript | Новый массив JavaScript | Позволяет инвертировать условие (invert) |
Оба метода обеспечивают мощные возможности фильтрации, но выбор зависит от типа данных: DOM или обычный массив.
Методы фильтрации также позволяют выбирать элементы по индексам в коллекции.
Пример: выбор элементов с чётными индексами
$('li').filter(function(index) {
return index % 2 === 0;
});
Это создаёт коллекцию из элементов <li> с
индексами 0, 2, 4 и так далее.
Фильтрация является универсальным инструментом для работы как с
массивами данных, так и с элементами DOM. Методы .filter()
и $.grep() позволяют задавать точные условия выбора,
комбинировать их с другими операциями и работать с индексами, классами и
содержимым элементов. Грамотное применение этих методов повышает
читаемость кода и делает работу с данными более эффективной и
гибкой.