Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как отфильтровать массив

Короткий ответ

filter() оставляет элементы, для которых функция вернула true:

console.log([5, 12, 8, 20].filter((n) => n > 10).join(', '));

Результат:

12, 20

Убрать пустые значения

Если передать Boolean, из массива уйдут пустые строки, нули, null и undefined:

console.log(['a', '', 'b', null, 'c'].filter(Boolean).join(', '));

Результат:

a, b, c

Объекты

Условие может проверять любое свойство:

const tasks = [
  { title: 'Tea', done: true },
  { title: 'Coffee', done: false },
];
 
console.log(tasks.filter((task) => task.done).map((task) => task.title).join(', '));

Результат:

Tea

Несколько условий

Объединяйте условия через && и || внутри функции:

const products = [
  { name: 'Tea', price: 3, inStock: true },
  { name: 'Cake', price: 12, inStock: true },
  { name: 'Coffee', price: 5, inStock: false },
];
 
console.log(products.filter((p) => p.inStock && p.price < 10).map((p) => p.name).join(', '));

Результат:

Tea

Частая ошибка

filter() всегда возвращает массив, даже для одного совпадения. Чтобы получить один элемент, используйте find():

const users = [{ id: 1, name: 'Anna' }, { id: 2, name: 'Oleg' }];
 
console.log(users.filter((user) => user.id === 2).name);
console.log(users.find((user) => user.id === 2).name);

Результат:

undefined
Oleg

Функции из этого ответа

  • Array.prototype.filter — Создаёт новый массив из элементов, прошедших проверку.
  • Array.prototype.find — Возвращает первый элемент, прошедший проверку.
  • Array.prototype.map — Создаёт новый массив, преобразуя каждый элемент.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.