Кратко
СкопированоЭтот метод служит для поиска. Он определён для массивов и строк.
При вызове нужно передать, что искать. Вернётся индекс первого найденного элемента или -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), и наш скрипт не пустит человека на вечеринку.