От автора: поиск по массивам всегда предполагал написание сложного цикла, который проверял каждую ячейку на равенство переданному значению. В современном JavaScript есть два более эффективных способа: первый появился в JS в 2015 году, второй немного старше.
Метод includes
Начнем с самого молодого. Если просто, includes возвращает true, если переданное значение нашлось в массиве, и false, если его там нет. К примеру, у нас есть массив:
1 |
let stations = [ "Salyut", "Skylab", "Almaz", "Mir", "ISS", "Tiangong" ] |
Определить, присутствует ли в массиве конкретное значение, очень просто. Для ясности тест проводился в консоли:
1 2 3 4 5 |
stations.includes("Skylab"); > true stations.includes("Space Station V"); > false |
Обратите внимание, includes находит только целый элемент, а не вхождение в строку:
1 2 |
stations.includes("Sky"); > false |
Поиск регистрозависимый:
1 2 |
stations.includes("skylab"); > false |
Метод includes укажет, присутствует ли заданный элемент в массиве, но он не скажет вам, где он располагается. Однако вы можете задать стартовую точку поиска при помощи необязательного аргумента:
1 2 3 4 5 |
stations.includes("Mir", 2); > true stations.includes("Mir", 5); > false |
У метода includes довольно хорошая поддержка в последних версиях браузеров: Chrome 47, Firefox 43. Microsoft Edge и Safari 9. Метод не поддерживается в IE, но вы можете воспользоваться специальным полифилом polyfills.io. Из-за отсутствия в JS четко выраженной типизации данных метод includes можно применять и к строкам для нахождения слов, фраз и последовательностей символов.
1 2 3 4 |
let sentence = "The ISS orbits at a height of 400km"; sentence.includes("orbits"); > true |
Метод indexOf
Метод indexOf возвращает позицию найденного элемента в массиве. Возьмем тот же самый массив:
1 |
let stations = [ "Salyut", "Skylab", "Almaz", "Mir", "ISS", "Tiangong" ]; |
При помощи метода indexOf мы можем определить позицию элемента в массиве, который равен передаваемому значению:
1 2 |
stations.indexOf("ISS"); > 4 |
Если элемент не найден, indexOf вернет -1:
1 2 |
stations.indexOf("Elysium"); > -1 |
Метод отлично поддерживается во всех современных браузерах, в том числе и в IE9+. Как и в методе includes, можно добавить необязательный аргумент со стартовой точкой для поиска.
Метод lastIndexOf
Метод indexOf находит первое совпадение с начала массива. А метод lastIndexOf начинает поиск с конца массива.
1 2 |
stations.lastIndexOf("Almaz"); > 2 |
Обратите внимание, метод lastIndexOf возвращает позицию с начала массива и вернет -1 (как indexOf), если совпадений не найдено. Как и в методе indexOf, в lastIndexOf можно указать дополнительный аргумент. Однако теперь этот аргумент будет указывать точку старта поиска с конца массива. Вы можете догадаться, что поддержка у данного метода такая же, как и у метода indexOf.
Источник: //thenewcode.com/
Редакция: Команда webformyself.