Меню Закрыть

Javascript найти объект в массиве объектов

Содержание

На этой странице

Сводка

Метод 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 , если в массиве нет простых чисел).

Читайте также:  Error core library wasn t found

Полифилл

Этот метод был добавлен в спецификации 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() :

Читайте также:  Philips 32pfl5406h 60 не включается

В следующем примере функция 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() способ:

Читайте также:  Stdio h нет такого файла или каталога

Примечание: такие методы, как find() или filter() и функции стрелочку не поддерживаются старыми браузерами (например, IE), поэтому, если вы хотите поддерживать эти браузеры, вы должны транспилировать свой код с помощью Бабель (С polyfill).

как вы уже используете jQuery, вы можете использовать grep функция, предназначенная для поиска массива:

результатом является массив с найденными элементами. Если вы знаете, что объект всегда есть, и что это происходит только один раз, вы можете просто использовать result[0].foo чтобы получить значение. В противном случае вы должны проверить длину результирующего массива. Пример:

другое решение-создать объект поиска:

Это особенно интересно, если вам нужно сделать много просмотров.

для этого не потребуется много памяти, так как идентификаторы и объекты будут совместно использоваться.

ECMAScript 2015 предоставляет find () метод с массивами:

Он работает без внешних библиотек. Но если вы хотите поддержка старых браузеров вам понадобится этот полифилл.

Рекомендуем к прочтению

Добавить комментарий

Ваш адрес email не будет опубликован.