Главная/Статьи/JavaScript: Понимание функции Filter()
JavaScript

JavaScript: Понимание функции Filter()

Метод filter() создаёт новый массив из элементов, прошедших проверку условия. Исходный массив не изменяется.

Синтаксис

let newArr = oldArr.filter(callback);

Параметры callback-функции: element — текущий элемент, index — индекс, arr — исходный массив.

Filter vs. For Loop

Традиционный подход — перебор с условием:

let arr = [1, 2, 3, 4, 5, 6];
let even = [];
for (var i = 0; i < arr.length; i++) {
  if (arr[i] % 2 === 0) even.push(arr[i]);
}
// even = [2, 4, 6]

То же самое через filter():

let even = arr.filter(val => val % 2 === 0);
// even = [2, 4, 6]

Фильтрация объектов

Фильтрация стран по населению свыше 500 миллионов:

let data = [
  { country: 'China',     population: 1409517397 },
  { country: 'India',     population: 1339180127 },
  { country: 'USA',       population: 324459463  },
  { country: 'Indonesia', population: 263991379  }
];

let bigCountries = data.filter(val => val.population > 500000000);
// [{ country: 'China', ... }, { country: 'India', ... }]

Фильтрация вложенных структур

Для фильтрации по вложенным массивам используйте метод some():

function getResourcesByCategoryName(Resources, CategoryName) {
  return Resources.filter(function(resource) {
    return resource.categories
      .some(function(category) {
        return category.name == CategoryName;
      });
  });
}

Метод some() возвращает true, если хотя бы один элемент вложенного массива удовлетворяет условию — именно то, что нужно для фильтра.