Кратко
СкопированоЭтот метод служит для поиска. Он определён для массивов и строк.
При вызове нужно передать, что искать. Вернётся индекс первого найденного элемента или -1
, если ничего не нашлось.
Как пишется
СкопированоИскомый элемент передаётся первым аргументом — array1
const example = ['чебурашка', 'гена', 'шапокляк', 'лариска']console.log(example.indexOf('гена'))// 1
const example = ['чебурашка', 'гена', 'шапокляк', 'лариска'] console.log(example.indexOf('гена')) // 1
Как понять
СкопированоДля массивов: ищет переданный элемент в массиве. Если элемент один, то возвращает индекс этого элемента. Если элементов много — возвращает индекс первого подходящего элемента. Элемента в массиве нет — вернёт -1
const haystack = ['Петя', 'Настя', 'Артур', 'Лена', 'Настя']console.log(haystack.indexOf('Лена'))// 3console.log(haystack.indexOf('Настя'))// 1console.log(haystack.indexOf('Эдуард Аркадьевич'))// -1
const haystack = ['Петя', 'Настя', 'Артур', 'Лена', 'Настя'] console.log(haystack.indexOf('Лена')) // 3 console.log(haystack.indexOf('Настя')) // 1 console.log(haystack.indexOf('Эдуард Аркадьевич')) // -1
Для строк: работает так же, как с массивами, но можно искать не только буквы в строке, но и подстроки. Например:
const haystack = 'Мама мыла раму'console.log(haystack.indexOf('а'))// 1console.log(haystack.indexOf('мыла'))// 5console.log(haystack.indexOf('ё'))// -1
const haystack = 'Мама мыла раму' console.log(haystack.indexOf('а')) // 1 console.log(haystack.indexOf('мыла')) // 5 console.log(haystack.indexOf('ё')) // -1
На практике
Скопированосоветует Скопировано
🛠 Найти индексы всех подходящих элементов
СкопированоЧтобы найти индексы всех искомых элементов, используют второй аргумент. Он указывает, с какого места начинать поиск. Таким образом можно проигнорировать те элементы, которые уже нашли и начинать поиск сразу после них:
const haystack = 'мама мыла раму'let lastResult// напечатаем индексы всех букв М во фразеwhile (lastResult !== -1) { lastResult = haystack.indexOf('м', lastResult + 1) if (lastResult !== -1) { console.log(lastResult) }}
const haystack = 'мама мыла раму' let lastResult // напечатаем индексы всех букв М во фразе while (lastResult !== -1) { lastResult = haystack.indexOf('м', lastResult + 1) if (lastResult !== -1) { console.log(lastResult) } }
🛠 indexOf()
или includes()
СкопированоНе используйте index
для проверки вхождения элемента в массив/строку, для этого есть метод includes
.
Раньше методом index
часто проверяли, есть ли элемент в массиве. Эта задача проще, индекс здесь не нужен, но других методов для этого не было.
Поэтому в старых скриптах можно увидеть такой код:
const guestList = ['Петя', 'Настя', 'Артур', 'Лена', 'Настя', 'Эммануил']const guest = // получаем откуда-нибудь имя гостяif (guestList.indexOf(guest) >= 0) { // пускаем на вечеринку} else { // отправляем домой}
const guestList = ['Петя', 'Настя', 'Артур', 'Лена', 'Настя', 'Эммануил'] const guest = // получаем откуда-нибудь имя гостя if (guestList.indexOf(guest) >= 0) { // пускаем на вечеринку } else { // отправляем домой }
🤖 Из-за того, что index
возвращает индекс, в условии обязательно нужна проверка (>
или !
). Если так не сделать, то появится неприятный баг: мы будем пускать на вечеринку всех, кроме первого гостя в списке.
Дело в том, что JavaScript интерпретирует ненулевые числа как истину (true
) и будет запускать первую ветку if
. А на первом госте index
вернёт 0
, что считается ложным (false
), и наш скрипт не пустит человека на вечеринку.