Метод filter
Метод filter
Технический фундамент filter
filter выполняет callback-предикат для каждого элемента и оставляет только те, где результат true.
const source = [1, 2, 3, 4];
const selected = source.filter((n) => n % 2 === 0);
console.log(selected); // [2, 4]
console.log(source); // [1, 2, 3, 4]
Ключевой момент: длина результата может быть любой — от 0 до длины исходного массива.
Синтаксис
const result = array.filter((element, index, arr) => {
return condition;
});
Если callback возвращает true, элемент попадет в новый массив. Если false — нет.
const nums = [1, 2, 3, 4, 5];
const evens = nums.filter((n) => n % 2 === 0);
console.log(evens); // [2, 4]
filter с массивом объектов
const tasks = [
{ id: 1, done: true },
{ id: 2, done: false },
{ id: 3, done: true },
];
const completed = tasks.filter((task) => task.done);
console.log(completed.length); // 2
Смотри, что важно: filter возвращает новый массив, но элементы внутри (объекты) не копируются - это те же ссылки.
const a = [{ id: 1, done: true }];
const b = a.filter((t) => t.done);
b[0].id = 2;
console.log(a[0].id); // 2
Что будет, если условие слишком широкое
const values = [0, 1, '', 'ok', null, 5];
const truthyOnly = values.filter(Boolean);
console.log(truthyOnly); // [1, 'ok', 5]
Это полезно, но важно понимать: 0 и '' тоже будут удалены, хотя иногда они валидны для бизнес-логики.
Проверь себя: подойдет ли filter(Boolean) для массива цен, где 0 — допустимая цена?
Микро-сценарии
- Поиск товаров по минимальной цене.
const visible = products.filter((p) => p.price >= minPrice);
- Отбор активных подписок.
const activeSubscriptions = subscriptions.filter((s) => s.status === 'active');
Типичные ошибки
- Писать в callback преобразование вместо булевой проверки.
- Ожидать, что
filterвернет один элемент (для этого естьfind). - Случайно использовать
=вместо===в условии. - Забывать, что результат может быть пустым массивом.
Анти-провал: если тебе нужен именно один объект, выбирай find; если нужно несколько — filter.
Краткий итог
filterотбирает элементы по условию.- Возвращает новый массив, исходный не меняется.
- Используется для любых сценариев «показать только подходящее».
- Callback должен возвращать
true/false. - Пустой результат
[]— нормальный и ожидаемый кейс.