indexOf()
indexOf() - это метод в JavaScript, который ищет указанный элемент в массиве или строке. Если значение найдено, вернёт индекс этого элемента; если нет, то вернёт -1. При количестве вхождений больше одного вернёт индекс первого.
Синтаксис
let string = ['a', 'b', 'c', 'a']
string.indexOf('value', index)
value - значение элемента, который ищем в массиве или строке
index Необязательный - указывает, с какого индекса начинать поиск. По умолчанию равен 0.
Вызов метода indexOf() начинается с объекта (строки или массива), в котором производится поиск. Затем следует точка, после которой указывается название метода, а в круглых скобках - значение value, которое нужно найти.
let mySkills = ['HTML', 'CSS', 'JavaScript', 'React']
mySkills.indexOf('JavaScript') // 2
То же самое можем провернуть и со строкой.
let mySkills = 'HTML, CSS, JavaScript, React'
mySkills.indexOf('JavaScript') // 11
Искать можно также отдельные буквы и символы.
mySkills.indexOf(',') // 4
mySkills.indexOf('R') // 23
Если метод не находит наше значение, результатом будет -1.
mySkills.indexOf('Angular') // -1
Стоит учитывать, что метод использует регистрозависимый поиск. Это означает, что indexOf() будет искать точное соответствие указанной строке, включая регистр.
let mySkills = ['HTML', 'CSS', 'JavaScript', 'React']
mySkills.indexOf('javascript') // -1
Если массив или строка пустая, метод вернет -1.
let mySkills = []
mySkills.indexOf('R') // -1
indexOf() как условие
Используя метод indexOf() в условиях, например при работе с if, стоит учитывать, что если результатом проверки будет 0, код может интерпретировать это как false и вызвать нежелательное поведение.
let mySkills = ['HTML', 'CSS', 'JavaScript', 'React']
mySkills.indexOf('HTML') ? console.log('Нашел') : console.log('Не нашел')
При записи использовали тернарный оператор. Результатом будет Не нашел, хотя искомая строка явно присутствует. Корректнее будет сформулировать условие, сравнивая результат работы метода с -1, а не с нулём.
let mySkills = ['HTML', 'CSS', 'JavaScript', 'React']
mySkills.indexOf('HTML') >= 0 ? console.log('Нашел') : console.log('Не нашел')
Подсчет количества вхождений
let message = 'Я обязательно запомню, как работает метод indexOf()'
let index = message.indexOf('о')
let count = 0
while(index !== -1) {
count++
index = message.indexOf('о', index + 1)
}
console.log(count) // 5
Используя цикл while, и увеличивая позицию, с которой нужно начинать поиск, мы ищем все вхождения. При окончании поиска выводим результат в console.
Проверка на повторы
С помощью indexOf() и lastIndexOf() можно проверить, встречается ли символ в строке больше одного раза.
let value = '10,20,30'
let firstCommaIndex = value.indexOf(',')
let lastCommaIndex = value.lastIndexOf(',')
console.log(firstCommaIndex !== lastCommaIndex)
Результат:
true
Если первая и последняя позиции отличаются, значит запятая встретилась в строке несколько раз.
let value = '10,20'
console.log(value.indexOf(',') !== value.lastIndexOf(','))
Результат:
false
Если символа нет или он встречается один раз, indexOf() и lastIndexOf() вернут одинаковое значение.