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по массиву. Чем длиннее массив, тем дольше он будет работать.