← Назад к вопросам

Что выдаст Filter, если ни один элемент не удовлетворит условию поиска?

2.2 Middle🔥 172 комментариев
#JavaScript Core

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Фильтрация в JavaScript: поведение метода filter() при отсутствии совпадений

Метод filter() в JavaScript всегда возвращает новый массив, даже если ни один элемент исходного массива не удовлетворяет условию проверки. В случае, когда все элементы "отфильтрованы", возвращается пустой массив [].

Основной принцип работы filter()

filter() создаёт новый массив, включая только те элементы, для которых функция — "предикат" (условие фильтрации) возвращает true. Если функция для всех элементов возвращает false, итоговый массив будет пустым.

Примеры с кодом

Пример 1: строгий фильтр

const numbers = [1, 2, 3, 4, 5];
const filteredNumbers = numbers.filter(num => num > 10);

console.log(filteredNumbers); // []
console.log(filteredNumbers.length); // 0
console.log(Array.isArray(filteredNumbers)); // true

Пример 2: фильтр по сложному условию

const users = [
  { name: 'Alex', age: 25 },
  { name: 'Maria', age: 30 },
  { name: 'John', age: 17 }
];

const adults = users.filter(user => user.age > 65);

console.log(adults); // []
console.log(adults === []); // false (это новый пустой массив, не ссылка на глобальный пустой массив)

Пример 3: с использованием index

const words = ['apple', 'banana', 'cherry'];
const result = words.filter((word, index) => index === 10);

console.log(result); // []

Ключевые особенности поведения filter()

  1. Возвращает новый массив – всегда, независимо от результата. Это гарантирует безопасность исходных данных.

  2. Не изменяет исходный массив – исходный массив остаётся неизменным, что соответствует принципам функционального программирования.

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

  4. Логическое продолжение цепочек методов – пустой массив от filter() можно безопасно обрабатывать дальше:

const data = [1, 2, 3];
const processed = data
  .filter(x => x > 5)
  .map(x => x * 2)
  .reduce((sum, x) => sum + x, 0);

console.log(processed); // 0 (reduce с начальным значением 0 работает даже с пустым массивом)

Сравнение с другими методами

  • find() – возвращает undefined при отсутствии совпадений.
  • findIndex() – возвращает -1 при отсутствии совпадений.
  • some() – возвращает false, если ни один элемент не удовлетворяет условию.
  • every() – возвращает true, только если все элементы удовлетворяют условию.

filter() уникален тем, что его результат всегда является массивом, что делает его идеальным для композиции функций и безопасной обработки данных.

Практическое применение и важность

В реальных приложениях часто встречаются ситуации, когда фильтрация может вернуть пустой массив:

  • Поиск по несуществующим критериям
  • Фильтрация данных перед рендерингом UI
  • Обработка динамически изменяющихся данных

Знание, что filter() возвращает пустой массив, позволяет:

  • Избежать ошибок типа "Cannot read property of undefined"
  • Писать более устойчивый код
  • Правильно обрабатывать "крайние случаи"

Таким образом, ответ на вопрос однозначен: метод filter() всегда возвращает новый массив, и если условия фильтрации не выполняются для любого элемента, этот новый массив будет пустым ([]). Это поведение является фундаментальным и ожидаемым в JavaScript, обеспечивая надежность и предсказуемость при обработке коллекций данных.

Что выдаст Filter, если ни один элемент не удовлетворит условию поиска? | PrepBro