> Что возвращает метод filter в JavaScript, если ни один элемент не подходит под условие (JavaScript)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: Домклик

Стек: JavaScript

> Пример ответа

Короткий ответ

Метод filter всегда возвращает новый массив. Если ни один элемент не удовлетворяет условию, результатом будет пустой массив []. Это важное отличие от методов вроде find, который в аналогичной ситуации вернёт undefined. Пустой массив - это валидный результат, а не ошибка, поэтому проверять его нужно через length, а не через сравнение с false или null.

Подробное объяснение

filter - это иммутабельный метод массива, который создаёт новый массив, содержащий только те элементы, для которых callback-функция вернула truthy-значение. Если callback возвращает falsy-значение для всех элементов, результирующий массив будет пустым.

Ключевые моменты:

  • Исходный массив не мутируется.
  • Callback вызывается для каждого элемента, включая undefined, null и пропущенные элементы (в отличие от map).
  • Пустой массив - это корректный результат, который можно безопасно использовать в цепочках методов, например, filter(...).map(...).
  • Проверка результата должна быть явной: result.length === 0, а не if (result) - пустой массив является truthy-значением.

На практике

В реальных задачах пустой результат filter - это нормальное состояние, которое нужно обрабатывать осознанно. Например, при фильтрации списка товаров по категории, если товаров нет, пользователю нужно показать сообщение "ничего не найдено", а не просто пустую страницу.

Также важно помнить, что filter не изменяет исходный массив, поэтому если вы планируете использовать результат для дальнейших операций, нужно присвоить его переменной или использовать в цепочке.

Пример кода

JAVASCRIPT
const numbers = [1, 2, 3, 4, 5];
const evenNumbers = numbers.filter(num => num % 2 === 0);
// [2, 4]
const negativeNumbers = numbers.filter(num => num < 0);
// []
// Проверка результата
if (negativeNumbers.length === 0) {
console.log('Нет отрицательных чисел');
}
// Пустой массив - truthy, поэтому такая проверка не сработает
if (negativeNumbers) {
console.log('Этот код выполнится всегда');
}

Как отвечать на собеседовании

Начните с прямого ответа: "возвращает новый пустой массив". Затем добавьте контекст: почему это важно, как это отличается от find и some, и как правильно проверять результат. Упомяните, что filter не мутирует исходный массив. Если спросят про производительность, отметьте, что filter всегда создаёт новый массив, даже если результат пустой, - это O(n) по времени и O(n) по памяти в худшем случае.

Что проверяет интервьюер

Интервьюер проверяет:

  • Понимание базовой семантики метода filter.
  • Знание разницы между filter и find (пустой массив vs undefined).
  • Осознание того, что пустой массив - truthy-значение.
  • Умение корректно обрабатывать пустой результат в реальном коде.

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

  • Проверка результата через if (result) - пустой массив truthy, поэтому условие всегда истинно.
  • Ожидание null или undefined вместо пустого массива.
  • Попытка мутировать исходный массив через filter - метод иммутабелен.
  • Забывание, что callback вызывается и для элементов со значением undefined в массиве (например, после delete).

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью