Как найти элемент массива по условию
Короткий ответ
find() возвращает первый элемент, для которого функция вернула true:
const users = [
{ id: 1, name: 'Anna', age: 30 },
{ id: 2, name: 'Oleg', age: 17 },
{ id: 3, name: 'Maria', age: 25 },
];
console.log(users.find((user) => user.id === 3).name);Результат:
MariaПозиция
findIndex() возвращает индекс элемента или -1:
const numbers = [5, 12, 8, 130];
console.log(numbers.findIndex((n) => n > 10));
console.log(numbers.findIndex((n) => n > 1000));Результат:
1
-1С конца
findLast() ищет с конца массива:
const numbers = [5, 12, 8, 130];
console.log(numbers.findLast((n) => n < 100));Результат:
8Все совпадения
find() останавливается на первом совпадении. Чтобы получить все, используйте filter():
const users = [
{ name: 'Anna', age: 30 },
{ name: 'Oleg', age: 17 },
{ name: 'Maria', age: 25 },
];
console.log(users.filter((user) => user.age >= 18).map((user) => user.name).join(', '));Результат:
Anna, MariaЧастая ошибка
Если ничего не найдено, find() возвращает undefined, и чтение свойства из него выбросит ошибку. Используйте ?.:
const users = [{ id: 1, name: 'Anna' }];
const user = users.find((u) => u.id === 5);
console.log(user?.name ?? 'not found');Результат:
not foundФункции из этого ответа
- Array.prototype.find — Возвращает первый элемент, прошедший проверку.
- Array.prototype.findIndex — Возвращает индекс первого элемента, подходящего под условие.
- Array.prototype.findLast — Ищет с конца массива первый элемент, подходящий под условие.
- Array.prototype.filter — Создаёт новый массив из элементов, прошедших проверку.