indexOf() и lastIndexOf()

Методы indexOf() и lastIndexOf() отыскивают в массиве элемент с указанным значением и возвращают индекс первого найденного элемента или –1, если элемент с таким значением отсутствует. Метод indexOf() выполняет поиск от начала массива к концу, а метод lastIndexOf() – от конца к началу.

a = [0,1,2,1,0];

a.indexOf(1) // => 1: a[1] = 1
a.lastIndexOf(1) // => 3: a[3] = 1
a.indexOf(3) // => -1: нет эле­мен­та со зна­че­ни­ем 3

В отличие от других методов, методы indexOf() и lastIndexOf() не принимают функцию в виде аргумента.
В первом аргументе им передается искомое значение.
Второй аргумент является необязательным: он определяет индекс массива, с которого следует начинать поиск.
Если опустить этот аргумент, метод indexOf() начнет поиск с начала массива, а метод lastIndexOf() – с конца.

Во втором аргументе допускается передавать отрицательные значения, которые интерпретируются как смещение относительно конца массива, как в методе splice(): значение –1, например, соответствует последнему элементу массива. Следующая функция отыскивает заданное значение в массиве и возвращает массив всех индексов, где было найдено совпадение. Здесь демонстрируется, как можно использовать второй аргумент метода indexOf() для поиска совпадений после первого.

// Оты­ски­ва­ет все вхо­ж­де­ния зна­че­ния x в мас­сив и воз­вра­ща­ет
// мас­сив ин­дек­сов най­ден­ных сов­па­де­ний

function findall(a, x) {
 var results = [], // Воз­вра­щае­мый мас­сив ин­дек­сов
 len = a.length, // Дли­на мас­си­ва, где вы­пол­ня­ет­ся по­иск
 pos = 0; // На­чаль­ная по­зи­ция по­ис­ка

 while(pos < len) { // По­ка ос­та­лись не­про­ве­рен­ные эле­мен­ты...
  pos = a.indexOf(x, pos); // Ис­кать

  if (pos === -1) break; // Ес­ли ни­че­го не най­де­но, по­иск за­вер­шен.
  results.push(pos); // Ина­че - со­хра­нить ин­декс в мас­си­ве
  pos = pos + 1; // И про­дол­жить по­иск со сле­дую­ще­го эле­мен­та
 }

 return results; // Вер­нуть мас­сив ин­дек­сов
}

P.S. Методы indexOf/lastIndexOfосуществляют поиск перебором. Если нужно проверить, существует ли значение в массиве – его нужно перебрать. Только так. Внутренняя реализацияindexOf/lastIndexOfосуществляет полный перебор, аналогичный циклуforпо массиву. Чем длиннее массив, тем дольше он будет работать.


<<< back

results matching ""

    No results matching ""