This page was translated from English by the community.Learn more and join the MDN Web Docs community.
Array.prototype.find()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since сентябрь 2015 г..
Сводка
Методfind() возвращаетзначение первого найденного в массиве элемента, которое удовлетворяет условию переданному в callback функции. В противном случае возвращаетсяundefined.
Также смотрите методfindIndex(), который возвращаетиндекс найденного в массиве элемента вместо его значения.
Если вам нужно найти позицию элемента или наличие элемента в массиве, используйтеArray.prototype.indexOf() илиArray.prototype.includes() соответственно.
In this article
Синтаксис
arr.find(callback[, thisArg])
Параметры
Возвращаемое значение
Значение элемента из массива, если элемент прошёл проверку, иначеundefined.
Описание
Методfind вызывает переданную функциюcallback один раз для каждого элемента, присутствующего в массиве, до тех пор, пока она не вернётtrue. Если такой элемент найден, методfind немедленно вернёт значение этого элемента. В противном случае, методfind вернётundefined. До Firefox 34 функцияcallback не вызывалась для «дырок» в массивах (bug 1058394).
Функцияcallback вызывается с тремя аргументами: значением элемента, индексом элемента и массивом, по которому осуществляется проход.
Если в методfind был передан параметрthisArg, при вызовеcallback он будет использоваться в качестве значенияthis. В противном случае в качестве значенияthis будет использоваться значениеundefined.
Методfind не изменяет массив, для которого он был вызван.
Диапазон элементов, обрабатываемых методомfind, устанавливается до первого вызова функцииcallback. Элементы, добавленные в массив после начала выполнения методаfind, не будут посещены функциейcallback. Если существующие, непосещение элементы массива изменяются функциейcallback, их значения, переданные в функцию, будут значениями на тот момент времени когда методfind посетит их; удалённые элементы все ещё будут посещены.
Примеры
>Пример: поиск простого числа в массиве
Следующий пример находит в массиве положительных чисел элемент, являющийся простым числом (либо возвращаетundefined, если в массиве нет простых чисел).
function isPrime(element, index, array) { var start = 2; while (start <= Math.sqrt(element)) { if (element % start++ < 1) { return false; } } return element > 1;}console.log([4, 6, 8, 12].find(isPrime)); // undefined, не найденоconsole.log([4, 5, 8, 12].find(isPrime)); // 5Полифил
Этот метод был добавлен в спецификации ECMAScript 6 и пока может быть недоступен во всех реализациях JavaScript. Однако, вы можете использовать следующий сниппет в качестве полифила:
// https://tc39.github.io/ecma262/#sec-array.prototype.findif (!Array.prototype.find) { Object.defineProperty(Array.prototype, 'find', { value: function(predicate) { // 1. Let O be ? ToObject(this value). if (this == null) { throw new TypeError('"this" is null or not defined'); } var o = Object(this); // 2. Let len be ? ToLength(? Get(O, "length")). var len = o.length >>> 0; // 3. If IsCallable(predicate) is false, throw a TypeError exception. if (typeof predicate !== 'function') { throw new TypeError('predicate must be a function'); } // 4. If thisArg was supplied, let T be thisArg; else let T be undefined. var thisArg = arguments[1]; // 5. Let k be 0. var k = 0; // 6. Repeat, while k < len while (k < len) { // a. Let Pk be ! ToString(k). // b. Let kValue be ? Get(O, Pk). // c. Let testResult be ToBoolean(? Call(predicate, T, « kValue, k, O »)). // d. If testResult is true, return kValue. var kValue = o[k]; if (predicate.call(thisArg, kValue, k, o)) { return kValue; } // e. Increase k by 1. k++; } // 7. Return undefined. return undefined; }, configurable: true, writable: true });}Спецификации
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-array.prototype.find> |