Метод find() в JavaScript: полное руководство с примерами

Ищем первый подходящий элемент в массиве

Метод find() в JavaScript: полное руководство с примерами

Метод find() в JavaScript перебирает массив и возвращает первый элемент, удовлетворяющий условию. Не список или индекс, а именно сам элемент.

find() используют, когда нужно быстро найти что-то конкретное — пользователя по id, товар с нужной ценой, запись в списке. Сегодня на примерах всё подробно разберём.

Что такое метод find() в JavaScript

Метод find() в JavaScript ищет первый элемент массива, который удовлетворяет заданному условию.

Главная фишка: как только метод нашёл то, что искал, он сразу останавливается и не идёт дальше. Это экономит ресурсы и время, особенно на больших массивах.

Технически метод живёт в Array.prototype. Это значит, что он встроен в JavaScript и доступен у любого массива «из коробки». Проще говоря, вы даёте команду движку: «Пробеги по списку и дай мне первый элемент, который подходит под это условие».

Синтаксис метода find()

Пишется максимально просто, особенно с современными стрелочными функциями.

const result = array.find((element, index, array) => {
  // ваше условие
  return element > 10;
});

Здесь у нас:

  • element — текущий элемент (единственный обязательный параметр);
  • index — его индекс (если вдруг нужен);
  • array — сам массив (используется редко).

На практике всё пишут короче, потому что обычно хватает одного параметра — самого элемента:

const users = ['Ann', 'Bob', 'Charlie'];
const result = users.find(user => user.startsWith('C'));
console.log(result); // "Charlie"
Что такое метод find() в JavaScript

Метод пробегается по массиву, проверяет каждое имя и возвращает первое, которое начинается с "C". Если бы подходящих имён не было, то result стал бы undefined.

Возвращаемое значение find()

Метод find() всегда работает по принципу: «нашёл — отдал, не нашёл — просто ушёл». Он перебирает элементы по очереди и вызывает функцию-колбэк, пока та не вернёт true. Как только условие выполняется, то метод останавливается и возвращает сам найденный элемент. Если же подходящего не оказалось, результат будет undefined — без ошибок и падений.

Например, найдём число в массиве, которое больше 10:

const numbers = [5, 12, 8, 130, 44];
const found = numbers.find(num => num > 10);
console.log(found); // 12 — первое число, большее 10
// А теперь попробуем найти то, чего нет
const notFound = numbers.find(num => num > 200);
console.log(notFound); // undefined
Что такое метод find() в JavaScript

Короче, говоря, у find() может быть только два сценария:

  • Успех — возвращает элемент, который подошёл (число, строку, объект или что угодно).
  • Провал — возвращает undefined.

Как использовать find() для поиска в массиве

Метод find() — это удобный инструмент для ситуаций, когда нужно взять первый подходящий элемент и на этом остановиться. Посмотрим, как это работает на практике.

Простой пример поиска элемента

Допустим, у нас есть список температур за неделю и нам нужно узнать, был ли день, когда жара перевалила за 30 градусов.

const temps = [20, 22, 19, 25, 32, 28, 35];
const hotDay = temps.find(t => t > 30);
console.log(hotDay); // 32
Как использовать find() для поиска в массиве

Что здесь происходит:

  1. find() начинает с первого элемента (20) и передаёт его в колбэк t => t > 30.
  2. Колбэк возвращает false, значит идём дальше.
  3. Так продолжается, пока не встретится 32.
  4. Условие t > 30 становится true, find() сразу останавливается и возвращает это значение.

Обратите внимание: 35 тоже больше 30, но find() взял первое совпадение (32) и дальше не стал ничего просматривать.

Поиск по сложным условиям

Условие внутри find() может быть любым — хоть проверкой длины строки, хоть анализом свойств объекта. Внутри колбэка можно задать любое логическое условие: проверять длину строки, значение свойства объекта или даже несколько критериев сразу.

Например, найдём первое слово длиннее 5 букв:

const words = ["код", "сон", "кофе", "скрипт", "монитор"];
const longWord = words.find(word => word.length > 5);
console.log(longWord); // "скрипт"
Как использовать find() для поиска в массиве

Метод последовательно проверяет каждый элемент массива, пока не встретит слово, где word.length > 5. Первым таким оказывается "скрипт", и на этом find() останавливается. Если бы подходящих слов не оказалось — вернулся бы undefined.

Полезный блок со скидкой

Если вам интересно разбираться со смартфонами, компьютерами и прочими гаджетами и вы хотите научиться создавать софт под них с нуля или тестировать то, что сделали другие, — держите промокод Практикума на любой платный курс: KOD (можно просто на него нажать). Он даст скидку при покупке и позволит сэкономить на обучении.

Бесплатные курсы в Практикуме тоже есть — по всем специальностям и направлениям, начать можно в любой момент, карту привязывать не нужно, если что.

Разница между find() и другими методами поиска

Работа с массивами — это база, которую спрашивают почти на любом собеседовании. Скорее всего, вас спросят: «А чем find отличается от filter? А когда лучше взять indexOf?» 

В JS много методов для поиска, и все они кажутся похожими. Но при этом один возвращает сам элемент, другой — новый массив, третий — индекс, а четвёртый вообще просто говорит true или false. Если перепутать метод, придётся писать костыли там, где можно было обойтись одной строчкой.

find() vs filter(): когда что использовать

Оба метода ищут элементы по условию, но работают по-разному. Поэтому запоминаем:

  • find() ищет одного,
  • filter() ищет всех.

Если нужен один элемент, который подходит под условие, то используйте find(). Если нужно несколько совпадений — берите filter().

Например:

const nums = [10, 20, 30, 40];
// find вернёт ЧИСЛО
const single = nums.find(n => n > 25); // 30 
// filter вернёт МАССИВ
const multiple = nums.filter(n => n > 25); // [30, 40]
find() vs filter(): когда что использовать

Если вы используете filter() только ради одного результата, вам придётся потом писать result[0]. Это работает, но выглядит лишним, поэтому проще сразу применить find().

find() vs findIndex(): сравнение методов

Эти методы работают похоже: оба ищут первый элемент, подходящий под условие, но возвращают разное:

  • find() возвращает сам элемент;
  • findIndex() возвращает его индекс (позицию в массиве).

Если элемент не найден, find() вернёт undefined, а findIndex() — число -1

Разберём на примере. Найдём первый элемент, который больше 25, и посмотрим, где он лежит.

// Исходный массив
const nums = [10, 20, 30, 40];
// find возвращает значение найденного элемента
const value = nums.find(n => n > 25);
console.log(value); // 30 — первое число, большее 25
// findIndex возвращает индекс (позицию) найденного элемента
const index = nums.findIndex(n => n > 25);
console.log(index); // 2 — элемент 30 находится под индексом 2
find() vs findIndex(): сравнение методов

Когда что использовать:

  • find() — когда нужно получить сам элемент (например, объект пользователя);
  • findIndex() — когда важно знать, где он находится, чтобы потом удалить, заменить или обновить.

Поиск объектов в массиве с find()

Вот тут начинается настоящая работа. В 99% случаев вы будете искать не числа, а объекты в массиве данных, которые приходят с бэкенда. Разберём на примерах.

Поиск по свойствам объекта

Представьте, что вы делаете корзину для интернет-магазина. С бэкенда прилетает список доступных способов оплаты с разной комиссией.

Пользователь кликает по радиокнопке, и в код попадает только id выбранного метода (например, 'sbp'). Ваша задача: найти полный объект этого метода, чтобы узнать, какая комиссия и как пересчитать итоговую сумму.

// Массив, который пришёл с API
const paymentMethods = [
  { id: 'card', label: 'Банковская карта', fee: 0 },
  { id: 'sbp', label: 'СБП (Система быстрых платежей)', fee: 0.5 }, // 0,5% комиссии
  { id: 'cash', label: 'Наличные курьеру', fee: 0 }
];
// То, что выбрал пользователь в UI (пришло из input value)
const selectedMethodId = 'sbp';
// Находим объект, чтобы узнать размер комиссии
const activeMethod = paymentMethods.find(method => method.id === selectedMethodId);
// Проверка на случай, если метод устарел или id кривой
if (activeMethod) {
  console.log(`Выбрано: ${activeMethod.label}`);
  console.log(`Комиссия составит: ${activeMethod.fee}%`);
  // Результат:
  // Выбрано: СБП (Система быстрых платежей)
  // Комиссия составит: 0,5%
}
Поиск объектов в массиве с find()

Почему это важно: в HTML формах мы оперируем простыми строками (value="sbp"). Но бизнес-логика работает с объектами — у них есть комиссии, лимиты, иконки, статусы. И метод find() становится мостом между «глупым» интерфейсом и «умными» данными приложения.

Работа с вложенными объектами

Теперь усложним задачу.

В реальных данных объекты редко бывают плоскими — почти всегда внутри есть вложенные поля: user.profile.id, product.meta.price, order.payment.method. Метод find() справится и с таким, если аккуратно обращаться к структуре.

Допустим, у нас массив пользователей с вложенными объектами профиля, и нужно найти того, чей profile.id совпадает с переданным идентификатором:

const users = [
  { id: 1, profile: { id: 'a1', name: 'Анна', city: 'Москва' } },
  { id: 2, profile: { id: 'b2', name: 'Борис', city: 'Санкт-Петербург' } },
  { id: 3, profile: { id: 'c3', name: 'Вадим', city: 'Новосибирск' } },
];
const searchId = 'b2';
// Ищем по вложенному полю
const foundUser = users.find(user => user.profile.id === searchId);
if (foundUser) {
  console.log(`Найден пользователь: ${foundUser.profile.name} (${foundUser.profile.city})`);
} else {
  console.log('Пользователь не найден');
}
// Найден пользователь: Борис (Санкт-Петербург)
Работа с вложенными объектами

Если структура данных может быть неполной (например, у некоторых пользователей нет profile), используйте опциональную цепочку (?.), чтобы избежать ошибок:

const foundUser = users.find(user => user.profile?.id === searchId);

Так код не упадёт, если у какого-то объекта profile равен undefined.

Другой один частый кейс — работа с товарами и вложенными свойствами вроде meta.availability или details.inStock.

const products = [
  { id: 1, name: "Ноутбук", details: { inStock: false } },
  { id: 2, name: "Монитор", details: { inStock: true } },
  { id: 3, name: "Клавиатура", details: { inStock: true } },
];
// Найдём первый товар, который есть в наличии
const available = products.find(p => p.details?.inStock);
console.log(available.name); // "Монитор"
Работа с вложенными объектами

Что важно запомнить: метод find() не ограничен одним уровнем вложенности — он проверяет любое условие, которое вы напишете. Главное, не забывайте проверять наличие промежуточных свойств, иначе получите ошибку.

Практические примеры использования find()

Метод find() постоянно используется в логике интерфейсов: выбор пользователя, фильтрация данных, работа с карточками товаров, таблицами и списками.

Дальше рассмотрим два типичных кейса из фронтенда.

Поиск пользователя по id

Один из самых частых сценариев: человек кликает по чьей-то аватарке, и нужно найти объект этого пользователя, чтобы открыть карточку профиля или модалку с подробностями.

const users = [
  { id: 101, name: "Анна", role: "admin" },
  { id: 102, name: "Борис", role: "editor" },
  { id: 103, name: "Вадим", role: "viewer" },
];
// Допустим, по клику в UI пришёл id
const clickedId = 102;
// Ищем юзера
const activeUser = users.find(user => user.id === clickedId);
if (activeUser) {
  console.log(`Открываем профиль: ${activeUser.name}`);
  console.log(`Роль: ${activeUser.role}`);
} else {
  console.log("Пользователь не найден");
}
// Открываем профиль: Борис
// Роль: editor
Практические примеры использования find()

Такой сценарий встречается буквально в каждом интерфейсе — от CRM-систем до онлайн-магазинов. Пользователь кликает по элементу, в обработчик прилетает только id, а дальше нужно достать все данные этого объекта: имя, роль, права, аватарку и т. д.

Поиск товара по критериям

Другой типичный кейс — это когда нужно найти объект по нескольким условиям, например первый товар, который есть в наличии и имеет скидку.

Например:

const products = [
  { id: 1, name: "Кофеварка", inStock: false, discount: 10 },
  { id: 2, name: "Тостер", inStock: true, discount: 0 },
  { id: 3, name: "Блендер", inStock: true, discount: 15 },
  { id: 4, name: "Миксер", inStock: true, discount: 0 },
];
// Найдём первый товар, который есть в наличии и со скидкой
const hotDeal = products.find(item => item.inStock && item.discount > 0);
if (hotDeal) {
  console.log(`Акция! ${hotDeal.name} со скидкой ${hotDeal.discount}%`);
} else {
  console.log("Подходящих товаров нет ");
}
// Акция! Блендер со скидкой 15%
Практические примеры использования find()

Метод find() быстро возвращает первый релевантный товар. Если список длинный, это экономит ресурсы, поскольку метод прекращает обход сразу после первого совпадения.

Особенности работы find()

Метод find() — часть стандарта ECMAScript 2015 (ES6). Он поддерживается всеми современными браузерами и работает одинаково, будь то код на фронтенде или на Node.js, поскольку это встроенная функция языка, а не браузерное API.

Главное, что нужно помнить: find() останавливается при первом успехе. Он идёт по массиву строго слева направо и не ищет «лучший» вариант, даже если дальше в массиве есть что-то более подходящее.

find() не изменяет исходный массив

Иногда новички путаются: если find() возвращает элемент, значит ли это, что он создаёт его копию? Нет.

Метод просто возвращает ссылку на существующий объект в массиве. Поэтому если вы измените найденный элемент, то он изменится и в исходном массиве.

Например, у нас есть массив объектов:

const items = [
  { id: 1, value: 10 },
  { id: 2, value: 20 }
];
// find() ничего не трогает: просто находит и возвращает ссылку
const found = items.find(item => item.id === 2);
// Меняем свойство у найденного объекта
found.value = 999;
console.log(items);
// [{ id: 1, value: 10 }, { id: 2, value: 999 }]
// Массив не пересоздавался, но объект внутри изменился,
// потому что find() вернул ссылку на него, а не копию
Особенности работы find()

Если вы хотите избежать таких побочных эффектов, то создавайте копию объекта, например через спред-оператор:

const copy = { ...found };
copy.value = 555;

Поведение при отсутствии элемента

Если ничего не найдено, то find() вернёт undefined. Ошибки не будет, просто вернётся результат. Поэтому перед обращением к свойствам стоит сделать проверку.

Например, есть массив с одним пользователем:

const users = [{ id: 1, name: "Анна" }];
// Пытаемся найти пользователя с id = 42 (которого нет)
const user = users.find(u => u.id === 42);
// Проверяем результат
if (!user) {
  // find() вернул undefined, потому что ничего не нашёл
  console.log("Пользователь не найден");
} else {
  // Если бы нашли, вывели бы имя
  console.log(user.name);
}
// "Пользователь не найден"
Особенности работы find()

Если вы часто работаете с необязательными данными, комбинируйте find() с опциональной цепочкой:

console.log(user?.name ?? "Неизвестно");

Ищете работу в IT?

Карьерный навигатор Практикума разберёт ваше резюме, проложит маршрут к первому работодателю, подготовит к собеседованиям в 2026 году, а с января начнёт подбирать вакансии именно под вас.

Бесплатно до 15 января!

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Вам может быть интересно
medium