Spec-Zone.ru › JavaScript

Array.prototype.find()

Базовый уровень Широко доступен

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с сентября 2016 года.

Метод find() экземпляров Array возвращает первый элемент в предоставленном массиве, который удовлетворяет предоставленной тестовой функции. Если ни одно значение не удовлетворяет тестовой функции, возвращается undefined.

  • Если вам нужен индекс найденного элемента в массиве, используйте findIndex().
  • Если вам нужно найти индекс значения, используйте indexOf(). (Он похож на findIndex(), но проверяет каждый элемент на равенство со значением вместо использования тестовой функции.)
  • Если вам нужно проверить, существует ли значение в массиве, используйте includes(). Опять же, он проверяет каждый элемент на равенство со значением вместо использования тестовой функции.
  • Если вам нужно проверить, удовлетворяет ли какой-либо элемент предоставленной тестовой функции, используйте some().
  • Если вам нужно найти все элементы, которые удовлетворяют предоставленной тестовой функции, используйте filter().

Попробуйте

const array = [5, 12, 8, 130, 44];

const found = array.find((element) => element > 10);

console.log(found);
// Expected output: 12

Синтаксис

find(callbackFn)
find(callbackFn, thisArg)

Параметры

callbackFn
Функция для выполнения для каждого элемента в массиве. Она должна возвращать истинное значение, чтобы указать, что найден соответствующий элемент, и ложное значение в противном случае. Функция вызывается со следующими аргументами:
element
Текущий элемент, обрабатываемый в массиве.
index
Индекс текущего элемента, обрабатываемого в массиве.
array
Массив, на котором был вызван find().
thisArg Необязательно
Значение, используемое в качестве this при выполнении callbackFn. См. итеративные методы.

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

Первый элемент в массиве, который удовлетворяет предоставленной тестовой функции. В противном случае возвращается undefined.

Описание

Метод find() является итеративным методом. Он вызывает предоставленную callbackFn функцию один раз для каждого элемента в массиве в порядке возрастания индекса, до тех пор, пока callbackFn не вернет истинное значение. Затем find() возвращает этот элемент и прекращает итерацию по массиву. Если callbackFn никогда не возвращает истинное значение, find() возвращает undefined. Читайте раздел итеративные методы для получения дополнительной информации о том, как эти методы работают в целом.

callbackFn вызывается для каждого индекса массива, а не только для тех, которые имеют назначенные значения. Пустые слоты в разреженных массивах ведут себя так же, как undefined.

Метод find() является общим. Он ожидает, что значение this будет иметь свойство length и целочисленные свойства.

Примеры

Найти объект в массиве по одному из его свойств

const inventory = [
  { name: "apples", quantity: 2 },
  { name: "bananas", quantity: 0 },
  { name: "cherries", quantity: 5 },
];

function isCherries(fruit) {
  return fruit.name === "cherries";
}

console.log(inventory.find(isCherries));
// { name: 'cherries', quantity: 5 }

Использование стрелочной функции и деструктуризации

const inventory = [
  { name: "apples", quantity: 2 },
  { name: "bananas", quantity: 0 },
  { name: "cherries", quantity: 5 },
];

const result = inventory.find(({ name }) => name === "cherries");

console.log(result); // { name: 'cherries', quantity: 5 }

Найти первое простое число в массиве

Следующий пример возвращает первый элемент в массиве, который является простым числом, или undefined, если простого числа нет.

function isPrime(n) {
  if (n < 2) {
    return false;
  }
  if (n % 2 === 0) {
    return n === 2;
  }
  for (let factor = 3; factor * factor <= n; factor += 2) {
    if (n % factor === 0) {
      return false;
    }
  }
  return true;
}

console.log([4, 6, 8, 12].find(isPrime)); // undefined, not found
console.log([4, 5, 8, 12].find(isPrime)); // 5

Примечание: Реализация isPrime() предназначена только для демонстрации. Для реального приложения вы захотите использовать сильно мемоизированный алгоритм, такой как решето Эратосфена, чтобы избежать повторных вычислений.

Использование третьего аргумента callbackFn

Аргумент array полезен, если вы хотите получить доступ к другому элементу в массиве, особенно когда у вас нет существующей переменной, ссылающейся на массив. Следующий пример сначала использует filter() для извлечения положительных значений, а затем использует find() для поиска первого элемента, который меньше своих соседей.

const numbers = [3, -1, 1, 4, 1, 5, 9, 2, 6];
const firstTrough = numbers
  .filter((num) => num > 0)
  .find((num, idx, arr) => {
    // Without the arr argument, there's no way to easily access the
    // intermediate array without saving it to a variable.
    if (idx > 0 && num >= arr[idx - 1]) return false;
    if (idx < arr.length - 1 && num >= arr[idx + 1]) return false;
    return true;
  });
console.log(firstTrough); // 1

Использование find() на разреженных массивах

Пустые слоты в разреженных массивах посещаются и обрабатываются так же, как undefined.

// Declare array with no elements at indexes 2, 3, and 4
const array = [0, 1, , , , 5, 6];

// Shows all indexes, not just those with assigned values
array.find((value, index) => {
  console.log("Visited index", index, "with value", value);
  return false;
});
// Visited index 0 with value 0
// Visited index 1 with value 1
// Visited index 2 with value undefined
// Visited index 3 with value undefined
// Visited index 4 with value undefined
// Visited index 5 with value 5
// Visited index 6 with value 6

// Shows all indexes, including deleted
array.find((value, index) => {
  // Delete element 5 on first iteration
  if (index === 0) {
    console.log("Deleting array[5] with value", array[5]);
    delete array[5];
  }
  // Element 5 is still visited even though deleted
  console.log("Visited index", index, "with value", value);
  return false;
});
// Deleting array[5] with value 5
// Visited index 0 with value 0
// Visited index 1 with value 1
// Visited index 2 with value undefined
// Visited index 3 with value undefined
// Visited index 4 with value undefined
// Visited index 5 with value undefined
// Visited index 6 with value 6

Вызов find() на объектах, не являющихся массивами

Метод find() считывает свойство length this, а затем обращается к каждому свойству, ключ которого является неотрицательным целым числом, меньшим length.

const arrayLike = {
  length: 3,
  "-1": 0.1, // ignored by find() since -1 < 0
  0: 2,
  1: 7.3,
  2: 4,
};
console.log(Array.prototype.find.call(arrayLike, (x) => !Number.isInteger(x)));
// 7.3

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

Спецификация
Спецификация языка ECMAScript® 2027
# sec-array.prototype.find

Совместимость с браузерами

Настольные компьютеры Мобильные устройства Сервер
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet WebView Android WebView on iOS Bun Deno Node.js
find
45
12
25
32
8
45
4
32
8
5.0
45
8
1.0.0
1.0
4.0.0

См. также

  • Polyfill для Array.prototype.find в core-js
  • Polyfill Array.prototype.find от es-shims
  • Руководство по индексированным коллекциям
  • Array
  • Array.prototype.findIndex()
  • Array.prototype.findLast()
  • Array.prototype.findLastIndex()
  • Array.prototype.includes()
  • Array.prototype.filter()
  • Array.prototype.every()
  • Array.prototype.some()
  • TypedArray.prototype.find()

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API