Метод filter для фильтрации массива в JavaScript

Давайте теперь изучим очень полезный метод filter, позволяющий отфильтровать элементы массива. Подобно уже изученным нами методам, этот метод в параметре получает функцию-коллбэк (с такими же параметрами, как и методы map и forEach), которая выполнится для каждого элемента массива.

Своим результатом filter возвращает новый массив, в который войдут только те элементы, для которых коллбэк вернет true.

Посмотрим работу функции на примере. Пусть у нас дан массив с числами:

let arr = [1, 2, 3, 4, 5];

Давайте отфильтруем массив, оставив в нем только четные числа:

let arr = [1, 2, 3, 4, 5]; let result = arr.filter(function(elem) { if (elem % 2 == 0) { return true; } else { return false; } }); console.log(result); // выведет [2, 4]

Упростим код, используя логические операторы:

let arr = [1, 2, 3, 4, 5]; let result = arr.filter(function(elem) { return elem % 2 == 0; }); console.log(result); // выведет [2, 4]

Еще больше упростим код, используя стрелочные функции:

let arr = [1, 2, 3, 4, 5]; let result = arr.filter(elem => elem % 2 == 0); console.log(result); // выведет [2, 4]

Это решение настолько короткое, что его можно разместить в параметре console.log:

let arr = [1, 2, 3, 4, 5]; console.log( arr.filter(elem => elem % 2 == 0) );

Дан массив с числами. Оставьте в нем только положительные числа.

Дан массив с числами. Оставьте в нем только отрицательные числа.

Дан массив с числами. Оставьте в нем только числа, которые больше нуля, но меньше 10.

Дан массив со строками. Оставьте в нем только те строки, длина которых больше 5-ти символов.

Дан массив с числами. Оставьте в нем только те числа, произведение которых на их порядковый номер меньше 30.

Дан массив, в нем могут быть обычные элементы и подмассивы, например [1, 2, [3, 4], 5, [6, 7]]. Оставьте в нем только обычные элементы.

Еще применение

Пусть у нас опять есть наш массив:

let arr = [1, 2, 3, 4, 5];

Давайте подсчитаем количество четных элементов в нем:

let arr = [1, 2, 3, 4, 5]; let filtered = arr.filter(elem => elem % 2 == 0); console.log( filtered.length ); // выведет 2

Перепишем еще проще:

let arr = [1, 2, 3, 4, 5]; console.log( arr.filter(elem => elem % 2 == 0).length );

Дан массив с числами. Посчитайте количество отрицательных чисел в этом массиве.