Page 118 - 6105
P. 118
з номера fromIndex, якщо він вказаний. Якщо немає – з початку масиву. Для
пошуку використовується строге порівняння ===. Наприклад:
var arr = [1, 0, false];
alert (arr.indexOf (0)); // 1
alert (arr.indexOf (false)); // 2
alert (arr.indexOf (null)); // -1
Метод «arr.lastIndexOf (searchElement [, fromIndex])» шукає елемент
справа-наліво: з кінця масиву або з номера fromIndex, якщо він вказаний.
Якщо потрібно перевірити, чи існує значення в масиві – всі елементи масиву
потрібно перебрати. Тільки так. Внутрішня реалізація indexOf / lastIndexOf
здійснює повний перебір, аналогічний циклу for з масиву. Чим довше масив, тим
довше він буде працювати.
Розглянемо задачу – є колекція рядків, і потрібно швидко перевіряти: чи є в
ній якийсь елемент. Масив для цього не підходить через повільне indexOf. Але
підходить об'єкт! Доступ до властивості об'єкта здійснюється дуже швидко, так
що можна зробити все елементи ключами об'єкта і перевіряти, чи є вже
такийключ. Наприклад, організуємо таку перевірку для колекції рядків "div", "a" і
"form":
var store = {}; // об'єкт для колекції
var items = [ "div", "a", "form"];
for (var i = 0; i <items.length; i ++) {
var key = items [i]; // для кожного елемента
створюємо властивість
store [key] = true; // значення тут не важливо
}
Тепер для перевірки, чи є ключ key, досить виконати if (store [key]). Якщо є
– можна використовувати значення, якщо немає – додати. Таке рішення працює
117