Эффективный поиск по массивам при помощи методов includes и indexOf

Эффективный поиск по массивам при помощи методов includes и indexOf

От автора: поиск по массивам всегда предполагал написание сложного цикла, который проверял каждую ячейку на равенство переданному значению. В современном JavaScript есть два более эффективных способа: первый появился в JS в 2015 году, второй немного старше.

Метод includes

Начнем с самого молодого. Если просто, includes возвращает true, если переданное значение нашлось в массиве, и false, если его там нет. К примеру, у нас есть массив:

let stations = [ "Salyut", "Skylab", "Almaz", "Mir", "ISS", "Tiangong" ]

Определить, присутствует ли в массиве конкретное значение, очень просто. Для ясности тест проводился в консоли:

stations.includes("Skylab");
> true

stations.includes("Space Station V");
> false

Обратите внимание, includes находит только целый элемент, а не вхождение в строку:

stations.includes("Sky");
> false

Поиск регистрозависимый:

stations.includes("skylab");
> false

Метод includes укажет, присутствует ли заданный элемент в массиве, но он не скажет вам, где он располагается. Однако вы можете задать стартовую точку поиска при помощи необязательного аргумента:

stations.includes("Mir", 2);
> true

stations.includes("Mir", 5);
> false

У метода includes довольно хорошая поддержка в последних версиях браузеров: Chrome 47, Firefox 43. Microsoft Edge и Safari 9. Метод не поддерживается в IE, но вы можете воспользоваться специальным полифилом polyfills.io. Из-за отсутствия в JS четко выраженной типизации данных метод includes можно применять и к строкам для нахождения слов, фраз и последовательностей символов.

let sentence = "The ISS orbits at a height of 400km";

sentence.includes("orbits");
> true

Метод indexOf

Метод indexOf возвращает позицию найденного элемента в массиве. Возьмем тот же самый массив:

let stations = [ "Salyut", "Skylab", "Almaz", "Mir", "ISS", "Tiangong" ];

При помощи метода indexOf мы можем определить позицию элемента в массиве, который равен передаваемому значению:

stations.indexOf("ISS");
> 4

Если элемент не найден, indexOf вернет -1:

stations.indexOf("Elysium");
> -1

Метод отлично поддерживается во всех современных браузерах, в том числе и в IE9+. Как и в методе includes, можно добавить необязательный аргумент со стартовой точкой для поиска.

Метод lastIndexOf

Метод indexOf находит первое совпадение с начала массива. А метод lastIndexOf начинает поиск с конца массива.

stations.lastIndexOf("Almaz");
> 2

Обратите внимание, метод lastIndexOf возвращает позицию с начала массива и вернет -1 (как indexOf), если совпадений не найдено. Как и в методе indexOf, в lastIndexOf можно указать дополнительный аргумент. Однако теперь этот аргумент будет указывать точку старта поиска с конца массива. Вы можете догадаться, что поддержка у данного метода такая же, как и у метода indexOf.

Источник: http://thenewcode.com/

Редакция: Команда webformyself.

Курс по JavaScript: основы

Изучите JavaScript с нуля до результата!

Смотреть курс

Метки:

Комментарии Вконтакте:

Комментарии Facebook:

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Я не робот.

Spam Protection by WP-SpamFree