Содержание
На этой странице
Сводка
Метод find() возвращает значение первого найденного в массиве элемента, которое удовлетворяет условию переданному в callback функции. В противном случае возвращается undefined .
Также смотрите метод findIndex() , который возвращает индекс найденного в массиве элемента вместо его значения.
Если вам нужно найти позицию элемента или наличие элемента в массиве, используйте Array.prototype.indexOf() или Array.prototype.includes() соответственно.
Синтаксис
Параметры
Возвращаемое значение
Значение элемента из массива, если элемент прошёл проверку, иначе 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 , если в массиве нет простых чисел).
Полифилл
Этот метод был добавлен в спецификации ECMAScript 6 и пока может быть недоступен во всех реализациях JavaScript. Однако, вы можете использовать следующий сниппет в качестве полифилла:
В статье рассказывается о том, как использовать методы JavaScript indexOf и lastIndexOf для определения расположения элемента внутри массива.
Знакомство с методом indexOf
Чтобы определить расположение элемента в массиве, можно воспользоваться методом indexOf() . Он возвращает индекс первого вхождения элемента, либо -1 , если он не найден.
Ниже приведен синтаксис метода indexOf() :
Метод indexOf() принимает два аргумента. searchElement -это элемент, который нужно найти в массиве. fromIndex – это индекс массива, с которого нужно начать поиск.
Аргумент fromIndex в качестве значения может принимать как положительное, так и отрицательное целое число. Если значение аргумента fromIndex будет отрицательным, метод indexOf() начнет поиск по всему массиву плюс значение fromIndex . Если опустить аргумент fromIndex , то метод начнет поиск с элемента 0 .
Учтите, что метод JavaScript array indexOf() при сравнении searchElement с элементами в массиве, использует алгоритм строгого равенства , схожий с оператором “ тройное равно ” (===) .
Примеры применения метода indexOf()
Предположим, что есть массив scores , в котором содержится шесть чисел:
В следующем примере метод indexOf() используется для поиска элементов в массиве scores :
В примере используется fromIndex с отрицательными значениями:
Предположим, что есть массив объектов. У каждого из них два свойства: name и age :
Следующие выражение возвращает -1 , даже если у первого элемента массива guests и searchElement будут одинаковые значения свойств name и age . Так как это два разных объекта:
Иногда нужно находить индексы всех упоминаний элемента в массиве. В приведенном ниже примере для этого в функции find() используется метод массива JavaScript indexOf() :
В следующем примере функция find() используется для возврата массива с позициями числа 10 в массиве scores :
Знакомство с методом lastIndexOf()
У массивов есть еще один метод — lastIndexOf() , который предлагает почти тот же функционал, что и indexOf() .
Синтаксис метода lastIndexOf() :
Метод возвращает индекс последнего вхождения searchElement в массиве. Если элемент не найден, будет возвращено значение -1 .
В отличие от метода JavaScript indexOf() , lastIndexOf() сканирует массив в обратном направлении, начиная от значения fromIndex .
Представленное ниже выражение возвращает последние индексы чисел 10 и 20 в массиве scores :
Примеры использования метода lastIndexOf()
Так как число 50 не находится в массиве, следующее выражение вернет -1 .
Мы научились использовать методы JavaScript indexOf() string и lastIndexOf() для поиска элементов в массиве.
Данная публикация представляет собой перевод статьи « JavaScript Array indexOf and lastIndexOf: Locating an Element in an Array » , подготовленной дружной командой проекта Интернет-технологии.ру
у меня есть массив:
Я не могу изменить структуру массива. Мне передают удостоверение 45 и я хочу сделать ‘bar’ для этого объекта в массиве.
как это сделать в JavaScript или с помощью jQuery?
29 ответов
использовать find() способ:
на find() метод возвращает значение в массиве, если элемент в массиве удовлетворяет предусмотрена функция тестирования. В противном случае undefined возвращается.
если вы хотите найти свою индекс вместо этого используйте findIndex() :
на findIndex() способ возвращает индекс первого элемента массива, который удовлетворяет предоставленной функции тестирования. В противном случае возвращается -1.
если вы хотите получить массив совпадающих элементов, используйте filter() метод вместо этого:
это вернет массив объектов. Если вы хотите получить массив foo свойства, вы можете сделать это с помощью map() способ:
Примечание: такие методы, как find() или filter() и функции стрелочку не поддерживаются старыми браузерами (например, IE), поэтому, если вы хотите поддерживать эти браузеры, вы должны транспилировать свой код с помощью Бабель (С polyfill).
как вы уже используете jQuery, вы можете использовать grep функция, предназначенная для поиска массива:
результатом является массив с найденными элементами. Если вы знаете, что объект всегда есть, и что это происходит только один раз, вы можете просто использовать result[0].foo чтобы получить значение. В противном случае вы должны проверить длину результирующего массива. Пример:
другое решение-создать объект поиска:
Это особенно интересно, если вам нужно сделать много просмотров.
для этого не потребуется много памяти, так как идентификаторы и объекты будут совместно использоваться.
ECMAScript 2015 предоставляет find () метод с массивами:
Он работает без внешних библиотек. Но если вы хотите поддержка старых браузеров вам понадобится этот полифилл.