Ефективний пошук по масивів за допомогою методів includes і indexOf

1

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

Метод includes

Почнемо з наймолодшого. Якщо просто, includes повертає true, якщо передане значення знайшлося в масиві, і false, якщо його там немає. Приміром, у нас є масив:

let stations = [ «Salyut», «Skylab», «Almaz», «Mir», «МКС», «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», «МКС», «Tiangong» ];

За допомогою методу indexOf ми можемо визначити позицію елемента в масиві, який дорівнює передаваному значенням:

stations.indexOf(«МКС»);
> 4

Якщо елемент не знайдений, indexOf поверне -1:

stations.indexOf(«Elysium»);
> -1

Метод відмінно підтримується у всіх сучасних браузерах, в тому числі і в IE9+. Як і в методі includes, можна додати необов’язковий аргумент зі стартовою точкою для пошуку.

Метод lastIndexOf

Метод indexOf знаходить перше збіг з початку масиву. А метод lastIndexOf починає пошук з кінця масиву.

stations.lastIndexOf(«Almaz»);
> 2

Зверніть увагу, метод lastIndexOf повертає позицію з початку масиву і поверне -1 (як indexOf), якщо збігів не знайдено. Як і в методі indexOf, в lastIndexOf можна вказати додатковий аргумент. Однак тепер цей аргумент буде вказувати точку старту пошуку з кінця масиву. Ви можете здогадатися, що підтримка у даного методу така ж, як і у методу indexOf.