Encodera

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

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

Как найти элемент массива по условию

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

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

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

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