JavaScript метод find()

Определение и применение

JavaScript метод find() возвращает значение первого элемента, удовлетворяющего условию функции обратного вызова, или undefined, если совпадений нет. Работу метода показывает пример «Как найти первое подходящее значение».

Функция вызывается для каждого индекса до первого результата, который преобразуется в true. Метод немедленно возвращает значение найденного элемента и не проверяет оставшиеся. Если совпадения нет, метод возвращает undefined.

Диапазон элементов, обрабатываемых с помощью метода find() устанавливается перед первым вызовом функции обратного вызова. Элементы, добавленные за пределами исходной длины после начала обхода, не посещаются. Значение по ещё не посещённому индексу внутри исходного диапазона читается в момент посещения.

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

thisValue задаёт this при вызове обычной функции обратного вызова. Стрелочная функция использует this из внешней области и игнорирует этот аргумент. Сравните пример с thisValue.

Поддержка браузерами

Спецификация: ecma262

Поддерживается во всех основных браузерах с 2016 года.

Показать браузеры
Совместимостьjavascript.builtins.Array.find
ВозможностьКомпьютерыМобильные
ChromeEdgeFirefoxOperaSafariChrome AndroidFirefox for AndroidOpera AndroidSafari on iOSSamsung BrowserWebView AndroidWebView on iOS
find✓45✓12✓25✓32✓8✓45✓4✓32✓8✓5.0✓45✓8

поддерживаетсяс ограниченияминет поддержкинет данных≤31 — не позднее версии 31

JavaScript синтаксис

JavaScript
array.find(callback);
array.find(callback, thisValue);

Спецификация

ECMAScript: Array.prototype.find.

Значения параметров

Параметры find()
Параметр Описание
callback Функция проверки, результат которой преобразуется в логическое значение. Метод завершает обход при первом истинном результате. Функция принимает следующие параметры:
  • currentValue - значение текущего элемента
  • index - индекс массива текущего элемента.
  • arr - массив, к которому принадлежит текущий элемент (по которому происходит проход).

Если в качестве параметра метода передается что-то, что не является объектом функции, то будет вызвано исключение TypeError. Обязательный параметр.

thisValue Значение, на которое может ссылаться ключевое слово this внутри функции обратного вызова. Если параметр thisValue не используется, то в качестве значения this будет использоваться undefined (в конечном счете this будет зависеть от обычных правил контекста выполнения функции). Необязательный параметр.

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

Первое подходящее значение или undefined. Если найден сам undefined, результат не позволяет отличить его от отсутствия совпадения — для этого используйте findIndex().

Особенности

Пустые позиции и удалённые до посещения элементы не пропускаются: функция получает undefined, если значение не найдено в цепочке прототипов. Сам метод массив не изменяет; функция обратного вызова может его изменить.

Проверьте это поведение в примере Как find() посещает пустую позицию.

Примеры, попробуйте сами

Как найти первое подходящее значение

В следующем примере с использованием JavaScript метода find() мы проверим содержится ли в массиве число меньше ноля: Измените условие и запустите код. Сравните первое найденное значение и отсутствие совпадений.

index.html
HTML
<p>Результат выполнения выводится в консоль.</p>
main.js
JavaScript
var array = [1, -2, 3, -4] // инициализируем переменную, содержащую массив числовых значений

console.log(
    array.find(
        // ищем первое значение, удовлетворяющее условию функции
        function checkNumber(currentValue) {
            return currentValue < 0 // проверяем является ли текущее значение меньше нуля
        } // если true, то возвращаем это значение (если массив не содержит такого значение, то undefined)
    )
) // возвращаемое значение -2

// аналогично с использованием стрелочной функции
console.log(array.find((currentValue) => currentValue < 0)) // возвращаемое значение -2
console.log(array.find((currentValue) => currentValue > 0)) // возвращаемое значение 1

Как использовать thisValue в find()

В следующем примере мы рассмотрим использование второго аргумента метода find(), который указывает на объект, на который мы можем ссылаться с использованием ключевого слова this внутри функции обратного вызова: Измените метод объекта и запустите код. Сравните результат; замените обычную callback-функцию стрелочной и проверьте, почему thisValue перестаёт задавать this.

index.html
HTML
<p>Результат выполнения выводится в консоль.</p>
main.js
JavaScript
var numbers = [1, -2, 3, -4] // инициализируем переменную, содержащую массив числовых значений
var myObject = {
    // инициализируем переменную, содержащую объект
    checkNumber: function (currentValue) {
        // метод объекта, который принимает значение
        return currentValue < 0 // проверяем является ли текущее значение меньше нуля
    },
}

console.log(
    numbers.find(
        // находим первый элемент, который соответствуют условию заданному в передаваемой функции
        function (currentValue) {
            return this.checkNumber(currentValue) //  возвращаемое значение метода checkNumber объекта myObject
        },
        myObject // объект, на который мы ссылаемся с использованием ключевого слова this
    )
) // если true, то возвращаем это значение (если массив не содержит такого значение, то undefined)
// возвращаемое значение -2

Как find() посещает пустую позицию

Замените пустую позицию значением 2. Сравните посещённые индексы и найденное значение.

index.html
HTML
<!doctype html>
<html lang="ru">
  <head>
    <meta charset="utf-8" />
    <title>Как find() посещает пустую позицию</title>
  </head>
  <body></body>
</html>
main.js
JavaScript
const values = [1, , 3]
const visited = []
const found = values.find((value, index) => {
    visited.push(index)
    console.log('Проверка:', index, value)
    return value === undefined
})
console.log('Посещены:', visited)
console.log('Найдено:', found)