Как отфильтровать массив
Короткий ответ
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 — Создаёт новый массив, преобразуя каждый элемент.