Метод 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 — допустимая цена?

Микро-сценарии

  1. Поиск товаров по минимальной цене.
const visible = products.filter((p) => p.price >= minPrice);
  1. Отбор активных подписок.
const activeSubscriptions = subscriptions.filter((s) => s.status === 'active');

Типичные ошибки

  • Писать в callback преобразование вместо булевой проверки.
  • Ожидать, что filter вернет один элемент (для этого есть find).
  • Случайно использовать = вместо === в условии.
  • Забывать, что результат может быть пустым массивом.

Анти-провал: если тебе нужен именно один объект, выбирай find; если нужно несколько — filter.

Краткий итог

  • filter отбирает элементы по условию.
  • Возвращает новый массив, исходный не меняется.
  • Используется для любых сценариев «показать только подходящее».
  • Callback должен возвращать true/false.
  • Пустой результат [] — нормальный и ожидаемый кейс.