Метод filter() в JavaScript - полезный метод, который просматривает массив и захватывает все элементы, которые являются истинными, в зависимости от предоставленного условия. filter() не изменяет исходный массив, для которого он вызывается. Будет создан новый массив, который будет заполнен содержимым исходного массива, истинным на основе функции обратного вызова. Я рассмотрю примеры того, как фильтровать информацию в JavaScript и React.

Написание функции фильтра против использования метода filter ()

Мы можем фильтровать массив без использования метода filter(), но нам придется написать гораздо больше кода. У нас есть такой набор фруктов:

let fruits = ['strawberry', 'banana', 'apple', 'blueberry', 'orange', 'grape']

Мы хотим, чтобы все фрукты длиннее пяти букв, и поместили их в новый массив. Без использования метода filter() мы можем создать функцию, которая принимает массив. Эта функция будет перебирать каждый элемент массива, используя цикл for, и проверять, длиннее ли этот элемент пяти букв. Если элемент длиннее пяти букв, он будет помещен в новый массив.

Эта функция вернула: ['strawberry', 'banana', 'blueberry', 'orange']

Метод filter() может сжать весь этот код в одну строку. Этот код намного чище и легче читается.

let filteredFruits = fruits.filter(fruit => fruit.length > 5)

Использование filter () в приложении React

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

Чтобы увидеть, как каждый компонент взаимодействует друг с другом, вы можете найти этот проект в репозитории GitHub здесь. Массив фруктов повторяется методом map() и создает компонент Fruit для каждого фрукта. При щелчке по фрукту этот фрукт удаляется из массива фруктов и добавляется в массив съеденных фруктов. Когда мы нажимаем на фрукт, он захватывает этот фруктовый объект и запускает функцию handleClick.

Эта handleClick функция принимает предыдущее состояние (prevState) и фильтрует его по объекту-фрукту, переданному в качестве аргумента (фрукту, на котором щелкнули). Если объект-фрукт не соответствует объекту-фрукту, который в настоящее время перебирается, фрукт помещается в новый фильтрованный массив. Массив фруктов в нашем состоянии теперь является этим новым фильтрованным массивом. Другими словами, фрукты, которые не были нажаты, остаются в массиве фруктов. Если объект Fruit в итерации действительно совпадает с фруктом, на который нажимают, он добавляется к массиву съеденных фруктов и отображается в разделе съеденных фруктов. …prevState.fruitsEaten представляет объекты в массиве съеденных фруктов до этого фрукта, по которому щелкнули в прошлом. fruit представляет этот последний фрукт, на который щелкнули, и добавляет его в конец массива съеденных фруктов.