JavaScript метод find()
Определение и применение
JavaScript метод find() возвращает значение первого элемента, удовлетворяющего условию функции обратного
вызова, или undefined, если совпадений нет. Работу метода показывает пример
«Как найти первое подходящее значение».
Функция вызывается для каждого индекса до первого результата, который преобразуется в true. Метод
немедленно возвращает значение найденного элемента и не проверяет оставшиеся. Если совпадения нет, метод возвращает
undefined.
Диапазон элементов, обрабатываемых с помощью метода find() устанавливается перед первым вызовом
функции обратного вызова. Элементы, добавленные за пределами исходной длины после начала обхода, не посещаются.
Значение по ещё не посещённому индексу внутри исходного диапазона читается в момент посещения.
Если значения существующих элементов массива изменяются в момент выполнения, то в качестве передаваемого значения
функции будет значение в тот момент времени, когда метод find() посещает их. Если элементы удаляются до
их посещения, то такие элементы будут посещены.
thisValue задаёт this при вызове обычной функции обратного вызова. Стрелочная функция
использует this из внешней области и игнорирует этот аргумент. Сравните
пример с thisValue.
Поддержка браузерами
Спецификация: ecma262
Поддерживается во всех основных браузерах с 2016 года.
| Возможность | Компьютеры | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
find | 45 | 12 | 25 | 32 | 8 | 45 | 4 | 32 | 8 | 5.0 | 45 | 8 |
поддерживаетсяс ограниченияминет поддержкинет данных≤31 — не позднее версии 31
JavaScript синтаксис
array.find(callback);
array.find(callback, thisValue);Спецификация
ECMAScript: Array.prototype.find.
Значения параметров
| Параметр | Описание |
|---|---|
callback |
Функция проверки, результат которой преобразуется в логическое значение. Метод завершает обход при первом
истинном результате. Функция принимает следующие параметры:
Если в качестве параметра метода передается что-то, что не является объектом функции, то будет вызвано
исключение |
thisValue |
Значение, на которое может ссылаться ключевое слово this внутри функции обратного вызова. Если
параметр thisValue не используется, то в качестве значения this будет использоваться
undefined (в конечном счете this будет зависеть от обычных правил контекста
выполнения функции). Необязательный параметр.
|
Возвращаемое значение
Первое подходящее значение или undefined. Если найден сам undefined, результат не позволяет
отличить его от отсутствия совпадения — для этого используйте findIndex().
Особенности
Пустые позиции и удалённые до посещения элементы не пропускаются: функция получает undefined, если
значение не найдено в цепочке прототипов. Сам метод массив не изменяет; функция обратного вызова может его изменить.
Проверьте это поведение в примере Как find() посещает пустую позицию.
Примеры, попробуйте сами
Как найти первое подходящее значение
В следующем примере с использованием JavaScript метода find() мы проверим содержится ли в массиве число меньше ноля: Измените условие и запустите код. Сравните первое найденное значение и отсутствие совпадений.
index.html
<p>Результат выполнения выводится в консоль.</p>
main.js
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
<p>Результат выполнения выводится в консоль.</p>
main.js
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 lang="ru">
<head>
<meta charset="utf-8" />
<title>Как find() посещает пустую позицию</title>
</head>
<body></body>
</html>
main.js
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)