Что делает метод filter в JavaScript
Разбор вопроса «Что делает метод filter в JavaScript» для Frontend Developer: что проверяет интервьюер, ключевые тезисы, практические примеры и частые ошибки.
Вопрос
Что делает метод filter в JavaScript
Профессия
Frontend Developer
Что хочет услышать интервьюер
Интервьюер хочет убедиться, что кандидат понимает принцип работы filter, его иммутабельность и способен привести практический пример. Также важно упомянуть, что filter не изменяет исходный массив, а создаёт новый.
Ключевые тезисы
- Метод filter создаёт новый массив, включая только те элементы исходного массива, которые удовлетворяют условию, заданному в callback-функции.
- Callback-функция должна возвращать true (элемент включается в новый массив) или false (элемент пропускается).
- Исходный массив не изменяется — filter является иммутабельным методом.
- Пример использования: const evenNumbers = [1, 2, 3, 4].filter(num => num % 2 === 0); // [2, 4]
Подробный ответ
Метод filter в JavaScript используется для создания нового массива, который включает только те элементы исходного массива, которые удовлетворяют условию, заданному в callback-функции. Этот метод не изменяет исходный массив, что делает его иммутабельным. Callback-функция должна возвращать true (элемент включается в новый массив) или false (элемент пропускается). Если callback-функция не возвращает true или false, метод filter интерпретирует результат как false, и элемент не включается в новый массив.
Пример использования: const evenNumbers = [1, 2, 3, 4].filter(num => num % 2 === 0); // [2, 4]. В этом примере callback-функция проверяет, является ли число чётным, и включает его в новый массив только если условие выполняется.
Метод filter можно использовать для работы с объектами, но важно помнить, что callback-функция должна корректно обрабатывать свойства объектов. Например, const users = [{name: 'Alice', age: 25}, {name: 'Bob', age: 30}]; const adults = users.filter(user => user.age >= 18); // [{name: 'Alice', age: 25}, {name: 'Bob', age: 30}].
Если callback-функция не возвращает явно true или false, метод filter интерпретирует результат как false. Например, const numbers = [1, 2, 3].filter(num => num); // [1, 2, 3], так как числа, отличные от 0, преобразуются в true. Однако, если callback-функция возвращает undefined, элемент не будет включён в новый массив.
Практические примеры
Пример 1
Фильтрация чётных чисел. const numbers = [1, 2, 3, 4, 5]; const evenNumbers = numbers.filter(num => num % 2 === 0); // [2, 4]Пример 2
Фильтрация объектов по свойству. const products = [{name: 'Laptop', price: 1000}, {name: 'Phone', price: 500}]; const expensiveProducts = products.filter(product => product.price > 600); // [{name: 'Laptop', price: 1000}]Пример 3
Фильтрация строк по длине. const words = ['apple', 'banana', 'cherry', 'date']; const longWords = words.filter(word => word.length > 5); // ['banana', 'cherry']Частые ошибки
- Типичная ошибка: Непонимание, что callback-функция должна возвращать true или false. Например, использование console.log внутри callback-функции без возврата значения приведёт к пустому массиву.
- Ошибка: Изменение исходного массива внутри callback-функции. Это может привести к неожиданным результатам, так как filter не предназначен для модификации исходного массива.
Связанные темы
- Метод map в JavaScript, который преобразует каждый элемент массива и возвращает новый массив.
- Метод reduce в JavaScript, который используется для агрегации данных в массиве.
- Иммутабельность в JavaScript и её важность в функциональном программировании.
Follow-up вопросы
Можно ли использовать filter для работы с объектами?
Уровень: intermediate
Метод filter предназначен для работы с массивами, но можно преобразовать объект в массив (например, с помощью Object.entries), применить filter, а затем вернуть результат обратно в объект.
Что произойдёт, если callback-функция в filter не вернёт true или false?
Уровень: basic
Если callback-функция возвращает falsy значение (например, undefined, null, 0), элемент не попадёт в новый массив. В противном случае элемент будет включён.
Как filter работает с пустыми массивами?
Уровень: basic
Если массив пустой, filter вернёт новый пустой массив, так как не будет элементов для проверки callback-функцией.
В чём отличие filter от метода map?
Уровень: intermediate
Метод filter создаёт новый массив, включая только элементы, удовлетворяющие условию. Метод map создаёт новый массив, преобразуя каждый элемент исходного массива.
Можно ли использовать асинхронные функции в callback для filter?
Уровень: advanced
Нет, filter не поддерживает асинхронные callback-функции напрямую. Для этого можно использовать комбинацию map и Promise.all, чтобы обработать асинхронные операции.
Существует ли тип данных массив в JavaScript
Разбор вопроса «Существует ли тип данных массив в JavaScript» для Frontend Developer: что проверяет интервьюер, ключевые тезисы, практические примеры и частые ошибки.
Что возвращает метод Array.isArray
Разбор вопроса «Что возвращает метод Array.isArray» для Frontend Developer: что проверяет интервьюер, ключевые тезисы, практические примеры и частые ошибки.