Методы filter, find и сложность O(n)
Автор конспекта: Стогниева Виктория
Метод filter создаёт новый массив, содержащий только те элементы исходного массива, для которых
переданная функция-колбэк возвращает true.
🔗 Ссылка на документацию filter
🔧 Как работает filter
-
У нас есть массив элементов (барашки, люди, слова, числа).
-
Мы вызываем у массива метод
.filter(callback). -
Callback-функция (функция-предикат) получает на вход каждый элемент массива и возвращаетtrueилиfalse. -
Все элементы, для которых
callbackвернулtrue, складываются в новый массив, которыйfilterвозвращает.
Разберем на примере с овечками
🤔 Идея
-
У нас есть массив овечек (объектов).
-
Каждая овечка ➡️ проверяется на условие (например, какой цвет у овечки).
-
Овечки, прошедшие проверку с помощью функции-предикат, попадают в новый массив.
-
Исходный массив овечек остаётся без изменений → создаётся новый массив желтых овечек.

⚙️ Реализация
- Для того чтобы метод
filterотфильтровал овечек, мы передаем внутрь него функцию-callback(предикат). Callbackработает с каждой овечкой и возвращаетtrue, если овечка подходит под условие (например,она желтого цвета), иfalse— если нет.- После того как каждая овечка проверена,
filterотдает нам результирующий массив с подходящими овечками.
Как данная функция выглядела бы в js:
Именно то, что возвращается из callback функции (true или false), определяет, попадет ли
элемент в новый массив. Callback вызывается столько раз, сколько элементов в массиве. И каждый раз
в callback приходит другой элемент массива.
Разберем на примере с людьми
🤔 Идея
-
У нас есть массив объектов (люди).
-
Нужно отфильтровать женщин.
-
Используем
filter, передаём в него функцию-предикат, которая принимает "человека" и возвращаетtrue, если нашлась женщина. -
Исходный массив остаётся без изменений → создаётся новый массив объектов.

⚙️ Реализация
- Для того чтобы метод
filterотфильтровал людей, мы передаем внутрь него функцию-сallback. Callbackработает с каждым человеком, определяет его пол и возвращаетtrue, если пол женский.- После того как каждый человек обработан,
filterотдает нам результирующий массив с женщинами.
Как данная функция выглядела бы в js:
Когда мы используем filter, мы не создаем копии объектов. Мы просто создаем новый массив, в
который попадают ссылки на те же объекты, что и в исходном массиве, если они удовлетворяют
условию. Это означает, что если мы изменим объект в отфильтрованном массиве, то это изменение
отразится и на исходном массиве, потому что это один и тот же объект.
🔧 Как работает find
Метод find возвращает первый элемент массива, который удовлетворяет условию проверочной функции.
🔗 Ссылка на документацию find
Важно отметить, что find возвращает сам элемент, а не массив. Если элемент не найден,
возвращается undefined.
Разберем на примере с овечками
🤔 Идея
-
У нас есть массив овечек (объектов).
-
Нужно найти первую овечку желтого цвета.
-
Используем
find, передаём в него функцию-предикат, которая проверяет цвет овечки. -
Возвращается первый подходящий объект или
undefined, если ничего не найдено.


⚙️ Реализация
Важно: метод find прекращает поиск после первого совпадения. Также, как и в случае с
filter, метод find не изменяет исходный массив и возвращает ссылку на тот же объект (если
элемент найден).
🔧 Сложность алгоритма O(n)
Асимптотическая сложность (или просто сложность) алгоритма - функция, которая указывает как ухудшается работа алгоритма при усложнении поставленной задачи.
Сложность O(n) означает, что время выполнения алгоритма линейно зависит от количества элементов в массиве.
new.png)
График наглядно демонстрирует, почему сложность O(n) называется линейной — время выполнения
растет прямо пропорционально объему обрабатываемых данных. Метод filter имеет сложность O(n).
🧠 Выводы о сложности O(n):
- Линейный рост: время выполнения увеличивается пропорционально количеству элементов.
- Предсказуемость: зная время для одного элемента, можно предсказать время для n элементов.
- Эффективность: алгоритмы с сложностью O(n) считаются эффективными для большинства практических задач.
Разберем на примере людей
⚙️ Реализация
- Метод
filterприменяется к массивуpersons. - Функция-колбэк внутри
filterпроверяет условиеperson.age >= 18для каждого элемента. - Сложность
O(n)означает, что время выполнения алгоритма линейно зависит от количества элементов в массиве. - В данном случае, поскольку мы перебираем каждый элемент массива ровно один раз, сложность
составляет
O(n), гдеn- количество элементов в массиве. - Для массива из 3 элементов будет выполнено 3 проверки, для массива из 100 элементов - 100 проверок, и так далее. Таким образом, время выполнения растет линейно с ростом размера массива.
Важное свойство метода filter — он не изменяет (не мутирует) исходный массив, а создает и
возвращает новый массив.
Метод filter может принимать второй параметр — индекс текущего элемента, который
показывает позицию элемента в исходном массиве.
В данном примере в колбэке используется третий параметр - array, который представляет собой
исходный массив, над которым производится операция filter.
⚙️ Реализация с помощью метода find
- В данном случае функция
predicateпроверяет, что возраст человека(person.age)больше или равен18. Таким образом, будет найден первый совершеннолетний человек в массиве. - Метод
findперебирает элементы до первого совпадения, затем останавливается. - После нахождения элемента, он выводится в консоль в формате
JSONстроки.
🏠 Домашнее задание
🎯 Цель задания:
Закрепить понимание работы методов filter и find, концепций предиката, callback-функций и
асимптотической сложности алгоритмов.
Ключевые понятия:
- Предикат - функция, возвращающая
trueилиfalse - Callback - функция, передаваемая в другую функцию
- Иммутабельность - методы не изменяют исходный массив
- Сложность O(n) - линейная зависимость времени от количества элементов
Задача 1
Работа с массивом чисел
Дан массив чисел:
Выполни следующие задания:
- Фильтрация четных чисел
- Фильтрация чисел больше 10
- Поиск первого числа больше 20
Задача 2
Работа с объектами (основная)
Дан массив студентов:
Часть A: Метод filter
- Взрослые студенты
- Отличники
- Студенты второго курса
- Сложная фильтрация
Часть B: Метод find
- Поиск по имени
- Первый отличник
- Поиск несуществующего
Задача 3
Создание предикатов
Создай отдельные функции-предикаты:
Задача 4
Работа с индексами
Задача 5
Анализ сложности (теоретическая)
Ответь на вопросы:
- Если в массиве 1000 элементов, сколько раз максимально может выполниться предикат в методе
filter? - Сколько раз максимально может выполниться предикат в методе
findдля того же массива? - В каком случае метод
findбудет работать быстрее всего? - Почему сложность обоих методов считается
O(n)?
Методы filter и find — это инструменты, которые ты будешь использовать каждый день в реальной
разработке, от простой фильтрации списков до сложной обработки данных с сервера. Освоив их сейчас,
ты заложишь фундамент для профессионального мышления React-инженера! 🚀


