В статье рассказывается о том, как использовать методы 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 » , подготовленной дружной командой проекта Интернет-технологии.ру
На этой странице
Сводка
Метод 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. Однако, вы можете использовать следующий сниппет в качестве полифилла:
У меня есть массив объектов. Их достаточно большое количество.
Объекты вида:
Как мне быстро найти среди них объект (он гарантировано будет один), свойство name которого совпадает с моим указанным (например, «г. Москва») и взять его id ? Нужен самый оптимальный и быстрый способ.

3 ответа 3
Самым быстрым способом будет создание объекта с ключами-name и доставать просто по ключу.
Если нужно достать именно из массива, то создать 2 массив со значениями name из первого в той же последовательности. После этого искать нужный индекс с помощью indexOf и по нему доставать нужный объект.
Но самым простым и читаемым вариантом(но более медленным по сравнению с предыдущими) будет filter . Он быстрее перебора массива с помощью for. in / for. of .