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 — это мощный инструмент для работы с массивами, который позволяет гибко выбирать элементы по любым условиям. Он широко используется при обработке данных, создании списков на основе пользовательских фильтров и работе с коллекциями в функциональном стиле программирования.