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() ÑооÑвеÑÑÑвенно.
СинÑакÑиÑ
arr.find(callback[, thisArg])
ÐаÑамеÑÑÑ
callback-
ФÑнкÑиÑ, вÑзÑваÑÑаÑÑÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ знаÑÐµÐ½Ð¸Ñ Ð² маÑÑиве, пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑÑи аÑгÑменÑа:
thisArg-
ÐеобÑзаÑелÑнÑй паÑамеÑÑ. ÐнаÑение, иÑполÑзÑемое в каÑеÑÑве
thisпÑи вÑполнении ÑÑнкÑииcallback.
ÐозвÑаÑаемое знаÑение
ÐнаÑение ÑлеменÑа из маÑÑива, еÑли ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ð¿ÑоÑÑл пÑовеÑкÑ, инаÑе 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.find
if (!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® 2027 Language Specification> # sec-array.prototype.find> |