filter — это метод массивов в JavaScript, который создает новый массив, содержащий только те элементы, которые удовлетворяют условию, заданному в переданной функции. Этот метод не изменяет исходный массив и часто применяется для фильтрации данных по заданным критериям.
Синтаксис метода filter
array.filter(callback(element, index, array), thisArg)callback— функция-предикат, которая вызывается для каждого элемента массива.element— текущий элемент массива.index— индекс текущего элемента.array— исходный массив.thisArg— необязательный параметр, который задает значениеthisвнутриcallback.
Функция callback должна возвращать true, если элемент проходит фильтрацию, и false, если он должен быть исключен из нового массива.
Пример фильтрации чисел
Фильтрация массива чисел для получения только четных чисел:
const numbers = [1, 2, 3, 4, 5, 6];
const evenNumbers = numbers.filter(n => n % 2 === 0);
console.log(evenNumbers); // [2, 4, 6]Фильтрация объектов по свойству
Фильтрация массива объектов для получения только активных пользователей:
const users = [
{ name: 'Alice', active: true },
{ name: 'Bob', active: false },
{ name: 'Charlie', active: true }
];
const activeUsers = users.filter(user => user.active);
console.log(activeUsers);
// [{ name: 'Alice', active: true }, { name: 'Charlie', active: true }]Фильтрация строк по подстроке
Фильтрация массива строк по наличию подстроки:
const fruits = ['apple', 'banana', 'cherry', 'apricot'];
const filteredFruits = fruits.filter(fruit => fruit.includes('ap'));
console.log(filteredFruits); // ['apple', 'apricot']Фильтрация с использованием индекса
В некоторых случаях при фильтрации может понадобиться индекс элемента:
const numbers = [10, 20, 30, 40, 50];
const evenIndexNumbers = numbers.filter((_, index) => index % 2 === 0);
console.log(evenIndexNumbers); // [10, 30, 50]Фильтрация с переданным контекстом
При необходимости в filter можно передать второй аргумент thisArg, который будет использоваться как контекст внутри callback:
const threshold = { value: 15 };
const numbers = [10, 20, 30, 5];
const filteredNumbers = numbers.filter(function(n) {
return n > this.value;
}, threshold);
console.log(filteredNumbers); // [20, 30]Особенности filter
- Исходный массив не изменяется.
- Если ни один элемент не соответствует условию, возвращается пустой массив.
filterвозвращает новый массив даже в случае полной фильтрации (когда все элементы проходят условие).
filter в JavaScript — это мощный инструмент для работы с массивами, который позволяет гибко выбирать элементы по любым условиям. Он широко используется при обработке данных, создании списков на основе пользовательских фильтров и работе с коллекциями в функциональном стиле программирования.