Метод Array.prototype.find() в JavaScript
📌 Tip: метод
find()ищет первый подходящий элемент. Если его нет, возвращаетсяundefined.
Краткое содержание
В этой статье мы подробно разберём метод Array.prototype.find() — встроенный инструмент поиска элементов в массивах JavaScript. Вы узнаете о синтаксисе, параметрах, практическом применении для объектов и строк, а также о способах учёта регистра при сравнении.
Оглавление
Введение
Метод find() предназначен для поиска первого элемента массива, удовлетворяющего заданному условию. В отличие от findIndex(), он возвращает значение элемента, а не его индекс. Если ни один элемент не соответствует критериям, результатом будет undefined.
Синтаксис
array.find(callback(element, index, array), thisArg);
-
callback — функция-предикат, вызываемая для каждого элемента:
element— текущий элемент массива.index(необязательно) — индекс текущего элемента.array(необязательно) — сам массив.
-
thisArg (необязательно) — значение, используемое в качестве
thisпри выполнении callback.
Параметры
| Параметр | Описание |
|---|---|
callback |
Функция, определяющая условие поиска. |
thisArg |
Контекст (this) для callback-функции (по умолчанию undefined). |
Возвращает: первый элемент, для которого callback вернёт true, или undefined.
Пример использования
Поиск объекта по свойству
Допустим, у нас есть массив книг:
const books = [
{ title: "War and Peace", author: "Leo Tolstoy" },
{ title: "Harry Potter and the Order of the Phoenix", author: "J. K. Rowling" },
{ title: "Northern Lights: The Subtle Knife", author: "Philip Pullman" }
];
function findBookByTitle(arr, title) {
return arr.find(item => item.title === title);
}
const found = findBookByTitle(books, "War and Peace");
console.log(found);
// { title: 'War and Peace', author: 'Leo Tolstoy' }
- Функция
findBookByTitleпринимает массив объектов и строкуtitle. - Внутри используется
arr.find(), в callback-сравнении проверяется совпадениеitem.title === title. - Возвращается первый подходящий объект или
undefined.
Учёт регистра
По умолчанию сравнение строк в JavaScript чувствительно к регистру. Чтобы сделать поиск нечувствительным, приводим обе строки к одному регистру:
function findBookIgnoreCase(arr, title) {
return arr.find(
item => item.title.toLowerCase() === title.toLowerCase()
);
}
console.log(findBookIgnoreCase(books, "war and peace"));
// { title: 'War and Peace', author: 'Leo Tolstoy' }
Частые ошибки и рекомендации
-
Не проверять
undefined. Всегда проверяйте результат метода:const result = findBookByTitle(books, "Unknown"); if (!result) { console.log("Книга не найдена"); } - Многоразовый перебор. Если нужно найти несколько элементов, вместо нескольких вызовов
find()лучше использоватьfilter(). - Не использовать в асинхронном коде без соответствующей обработки.
find()не работает сasync/awaitвнутри callback напрямую.
Заключение
Метод Array.prototype.find() — мощный и лаконичный инструмент для поиска элемента в массиве по любому критерию. Он помогает заменять громоздкие циклы на чистый и читаемый код.