.indexOf() — JavaScript — Дока
- Кратко
- Как пишется
- Как понять
- На практике
- Николай Лопин советует
Кратко
Секция статьи «Кратко»Этот метод служит для поиска. Он определён для массивов и строк.
При вызове нужно передать, что искать. Вернётся индекс первого найденного элемента или -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('Эдуард Аркадьевич'))// -1const 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()
Секция статьи «🛠 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
), и наш скрипт не пустит человека на вечеринку.
Если вы нашли ошибку, отправьте нам пул-реквест!
Во время отправки формы что-то пошло не так. Попробуйте ещё раз?
←
.includes
alt + ←
→
.length
alt + →
includes vs indexOf / Хабр
Начиная с ECMAScript 2016 в JavaScript появился новый метод includes для работы с массивами. По своей сути он очень сильно напоминает indexOf. В этой статье я хочу рассмотреть подробнее для чего был введен этод метод и в чем его отличие от indexOf.
Массивы
Итак, метод Array.prototype.includes определяет содержится ли в массиве искомое значение и возвращает true или false. Таким образом, в отличие от indexOf, который возвращает целое число, includes возвращает значение типа boolean. Это нововведение поможет разработчикам писать более чистый и понятный код.
Например, вот стандартный пример проверки того, содержится ли элемент в массиве, с помощью indexOf:
var numbers = [3, 5, 8, 11, 23, 7]; if (numbers.indexOf(1) !== -1) { // ... }
Используя includes, то же самое можно написать так:
var numbers = [3, 5, 8, 11, 23, 7]; if (numbers.includes(1)) { // ... }
Также при внедрении этого метода были учтены некоторые неочевидные особенности, замеченные при работе с indexOf. В отношении значений NaN поведение этого метода отличается.
Рассмотрим на примере:
var numbers = [3, 5, 8, 11, 23, 7, NaN]; if (numbers.indexOf(NaN) !== -1) { // Этот код не выполнится } if (numbers.includes(NaN)) { // Этот код выполнится }
Таким образом, indexOf(NaN) всегда возвращает -1, независимо от того содержится ли это значение в массиве, а includes(NaN) возвращает true или false в зависимости от того есть этот элемен в массиве или нет.
Производительность
Оценка производительности javascript методов не такая уж очевидная вешь, так как по сути в разных браузерах одна и та же функция может быть реализована по-разному в зависимости от языка, на котором написан сам браузер. К тому же очень много зависит от компьютера, на котором делается эта оценка. Но, тем не менее, я попытался сделать небольшой анализ.
Я создал массив из 10000 целых положительных чисел и использовал для анализа сайт jsbench. github.io. В обоих случаях, для чистоты эксперимента, был использован один и тот же массив. Оценка производилась в браузерах Chrome 53 и Firefox 48.
Chrome | ||
---|---|---|
includes | indexOf | |
элемент есть в середине массива |
8,361 ops/sec ±0.38% | 31,296 ops/sec ±0.65% |
элемент есть в начале массива |
136,512,737 ops/sec ±2.06% | |
искомого эелемента нет в массиве |
4,018 ops/sec ±0.71% | 95,221 ops/sec ±0.53% |
Firefox | ||
---|---|---|
includes | indexOf | |
элемент есть в середине массива |
84,880 ops/sec ±0.59% | 86,612 ops/sec ±1.35% |
элемент есть в начале массива |
34,087,623 ops/sec ±0. 99% | 33,196,839 ops/sec ±0.84% |
искомого эелемента нет в массиве |
25,253 ops/sec ±2.75% | 14,994 ops/sec ±1.16% |
Получается, что в Chrome indexOf всегда работает быстрее, а в Firefox ощутимой разницы практически нет (кроме случая, когда в массиве нет искомого элемента). И поведение нового метода в Firefox кажется более логичным, так как в общем-то indexOf и includes по логике должны иметь одну и ту же вычислительную сложность.
Строки
Аналогичный метод был добавлен и для работы со строками начиная с ECMAScript 2015. Ранее в Firefox в версиях с 18 по 39 этот метод существовал под именем contains, однако из-за проблем совместимости он был переименован в includes().
В заключение следует отметить, что данный метод поддерживается пока что не всеми браузерами.
Браузер | Массив | Строки |
---|---|---|
Chrome | 47 | 41 |
Firefox | 43 | 40 |
IE | нет | нет |
Opera | 34 | нет |
Safari | 9 | 9 |
Index • JavaScript для нетерпеливых программистов (версия ES2022)
JavaScript для нетерпеливых программистов (версия ES2022)
Пожалуйста, поддержите эту книгу:
купи это
или же
пожертвовать
Символ
-
!x
-
++х
-
х++
-
+х
-
,
(запятая) -
--х
-
х--
-
-х
-
х && у
-
х + у
-
х-у
-
х/у
-
х << у
-
х === у
-
х >>> у
-
х >> у
-
х ??= у
-
х ?? д
-
х и у
-
х ** у
-
х * у 9у
-
х ¦ у
-
х ¦¦ у
-
х ٪ у
-
=
-
с ? т : е
-
__прото__
-
~х
A
- средство доступа (объектный литерал)
- дополнение
- Модуль AMD
- выражение анонимной функции
- аргумент Аргумент
- против параметра
- Массив
- Отверстие для массива
- Индекс массива
- Литерал массива
- Массив, плотный
- Массив, многомерный
- Массив, разреженный
- Разрушение массива
- Объект, подобный массиву
-
ArrayBuffer
- Массивы, фиксированная компоновка
- Массивы, последовательность
- функция стрелки
- ESCII-побег
- ASI (автоматическая вставка точки с запятой)
-
утверждать
(модуль) - утверждение
- оператор присваивания
-
асинхронный
- асинхронная функция
-
асинхронная функция*
-
асинхронное ожидание
- асинхронный генератор
- асинхронный итеративный
- асинхронная итерация
- асинхронный итератор
- асинхронное программирование
- атрибут свойства
- автоматическая вставка точки с запятой (ASI)
-
ожидание
(асинхронная функция) -
ожидание
(асинхронный генератор)
B
- базовый класс
- с прямым порядком байтов
- большойинт
-
BigInt64Array
-
BigUint64Array
- двоичный целочисленный литерал
- привязка (переменная)
- побитовое И
- побитовое Не
- побитовое или
- побитовый Xor
- логическое значение
-
Логическое значение()
- связанная переменная
-
перерыв
C
- стек вызовов
- обратный вызов (асинхронный шаблон)
- функция обратного вызова
- верблюжий чемодан
- верблюжий чемодан
- кейс, верблюжий
- корпус, приборная панель
- чехол, кебаб чехол
- , змейка
- регистр, подчеркивание
-
улов
- класс
-
класс
- объявление класса
- определение класса
- выражение класса класс
- , база Класс
- , производный от класс
- , примесь
- классов, расширение
- крышка
- кодовая точка
- кодовый блок
- принуждение Функция комбинатора
- , Обещание
- оператор запятой
- Модуль CommonJS
- сравнение по тождеству
- сравнение по значению
- ключ вычисляемого свойства
- объединение строк
- условный оператор
- консоль
-
консоль. ошибка()
-
console.log()
-
константа
- константа
- функция-конструктор (роль обычной функции)
-
продолжить
- Преобразование в [тип]
- Всемирное координированное время (UTC)
- копировать объект глубоко
- копировать объект неглубоко
D
- чехол для приборной панели
- чехол для приборной панели
-
Просмотр данных
- дата
- формат даты и времени
- десятичный литерал с плавающей запятой
- десятичный целочисленный литерал
- оператор декрементации (префикс)
- оператор декрементации (суффикс)
- глубокая копия объекта
- экспорт по умолчанию
- значение по умолчанию (деструктуризация)
- значение по умолчанию (параметр)
- оператор значения по умолчанию (
??
) -
удалить
- удаление свойства
- плотный массив
- производный класс
- дескриптор свойства
- деструктивная операция
- деструктуризация
- деструктурирование массива
- деструктурирование объекта
- объект словаря
- прямой вызов метода
- отправленный вызов метода
- разделить на оператора
- подразделение
-
пока
- динамический импорт
- динамический
это
- динамический против статического
E
- ранняя активация
- Экма
- ECMA-262
- ECMAScript
- Модуль ECMAScript
- Эйх, Брендан
- порядок следования байтов (типизированные массивы)
- перечислимость
- перечисляемый (атрибут свойства)
- оператор равенства
- Модуль ЕС
- побег, ASCII
- побег, кодовая точка Unicode
- побег, кодовая единица Unicode
- экранирование HTML
-
оценка()
- вычисление выражения
- событие (асинхронный шаблон)
- цикл событий
- исключение
- упражнений, начало работы с
- возведение в степень
-
экспорт
-
экспорт по умолчанию
- экспорт, по умолчанию
- экспорт, названный
- выражение
- расширение классов
-
удлиняет
- внешняя итерация
- извлечение метода
F
-
ложный
- ложность
- ложный
-
наконец
- Массивы с фиксированной компоновкой
- объект фиксированной компоновки
- флагов (регулярное выражение)
-
Массив с плавающей запятой32
-
Массив с плавающей точкой64
- литерал с плавающей запятой
-
для
-
ожидание
-
для входящих
-
для
- свободная переменная
- замораживание объекта
- выполнено (состояние обещания)
- объявление функции
- функциональное выражение, анонимное Функциональное выражение
- с именем
- функция, стрелка
- функция, обычная
- функция, роли обычного
- функция, специализированная
-
функция*
Г
- сбор мусора Генератор
- , асинхронный Генератор
- синхронный
- геттер (литерал объекта)
-
глобальный
- глобальный объект
- глобальная область действия
- глобальная переменная
-
глобальныйЭтот
- по Гринвичу (время по Гринвичу)
- графемный кластер
- Среднее время по Гринвичу (GMT)
H
- куча
- шестнадцатеричный целочисленный литерал
- подъемный
- отверстие в массиве
I
- идентификатор
- идентификатор объекта
-
если
- IIFE (немедленно вызываемое функциональное выражение)
- немедленно вызванное функциональное выражение (IIFE)
-
импорт
-
импорт()
- импорт, названный
- импорт, пространство имен
-
импорт. мета
-
import.meta.url
- импорт, динамический
- импорт, статический
-
в
- оператор приращения (префикс)
- оператор приращения (суффикс)
- индекс массива
-
Бесконечность
- наследование, множественное
- наследство, холост
-
экземпляр
-
экземпляр
-
Int16Array
-
Int32Array
-
Int8Array
- целых чисел
- целое, безопасное
- внутренняя итерация
- итеративный (асинхронный)
- итеративный (синхронный)
- итерация, асинхронная
- итерация, внешняя
- итерация, внутренняя
- итерация, синхронная
- итератор (асинхронный)
- итератор (синхронный)
J
- JSON (формат данных)
-
JSON
(объект пространства имен)
K
- Чемодан для кебаба
- Чемодан для кебаба
- ключевое слово
L
- этикетка
- Оператор левой смены
-
пусть
- лексический
этот
- список свойств
- с прямым порядком байтов
- логический И
- логический Не
- логический или
М
- Карта
-
Карта
- Карта против объекта
-
Math
(объект пространства имен) - метод
- метод (литерал объекта)
- метод (роль обычной функции) вызов метода
- , прямой вызов метода
- , отправлено Метод
- , извлечение
- минус оператор (двоичный)
- минус оператор (унарный)
- смешанный класс
- спецификатор модуля Модуль
- , AMD Модуль
- , CommonJS
- многомерный массив
- множественное наследование
- несколько возвращаемых значений
- умножение
N
- именованный экспортный
- именованное функциональное выражение
- именованный импорт
- именованный параметр
- импорт пространства имен
-
NaN
-
узлы_модули
- н/мин
- нпм пакет
-
ноль
- нулевой оператор присваивания объединения (`??=`)
- нулевой оператор объединения (
??
) - номер
-
Номер()
О
- Объект
- литерал объекта Объект
- против карты Объект
- против примитивного значения
-
Объект()
- объект, копировать глубоко
- объект, скопируйте неглубоко
- объект, словарь
- объект, фиксированная компоновка Объект
- , замораживающий Объект
- , личность
- объектно-деструктурирующий
-
Объект. is()
- восьмеричный целочисленный литерал
- дополнение единиц
- оператор, назначение
- оператор, запятая Оператор
- , значение по умолчанию (
??
) - оператор, равенство Оператор
- , нулевое объединение (
??
) - оператор, нулевое объединение присваивания (`??=`)
- оператор,
пустота
- обычная функция
- обычная функция, роли
- переопределение свойства
P
- упаковка, н/мин
-
пакет.json
- параметр
- значение параметра по умолчанию Параметр
- против аргумента
- прохождение личности
- передача по значению Шаблон
- (регулярное выражение)
- в ожидании (состояние обещания)
- плюс оператор (двоичный)
- плюс оператор (унарный)
- полифилл
- полифилл, спекулятивный
- понифилл
- примитивное значение
- примитивное значение по сравнению с объектом
- личное имя
- частный слот
- проллифилл
- Обещание
- Обещание
- Функция комбинатора обещаний
- Обещание, состояния
-
Обещание. все()
-
Обещание.allSettled()
-
Обещание.любое()
-
Обещание.гонка()
- свойств, листинг
- имущество
- имущество (объект)
- атрибут свойства
- дескриптор свойства
- ключ свойства Ключ свойства
- , вычисленный Ключ свойства
- , в кавычках
- имя свойства
- символ свойства
- сокращенное значение свойства свойство
- , удаление
- прототип
- прототип цепи
- публичный слот
- общеизвестный символ
В
- Тесты
- , начало работы с
- указанный ключ свойства
R
- реальная функция (роль обычной функции)
- приемник
-
Регулярное выражение
- регулярное выражение
- литерал регулярного выражения
- отклонено (состояние обещания)
- остаточный оператор
- ЗАМЕНА
- реплика
- Требовать JS
- зарезервированное слово
- остаточный элемент (деструктурирование массива)
- остаточный параметр (вызов функции)
- остальное свойство (объект-деструктурирование)
- возвращаемых значений, кратных
- Выкройка модуля раскрытия
- ролей обычной функции
- семантика выполнения до завершения
S
- безопасное целое число
- область действия переменной
- скрипт
-
самостоятельно
- Массивы последовательности
- Комплект
-
Комплект
- сеттер (литерал объекта)
- заселено (состояние Promise)
- слежка
- поверхностная копия объекта
- прокладка
- короткое замыкание
- подписанный оператор правой смены
- одиночное наследование
- неаккуратный режим слот
- , частный слот
- , общедоступный
- чехол для змеи
- чехол для змеи
- разреженный массив
- специализированная функция Спецификатор
- , модуль
- спекулятивный полифилл
- распространение (
. ..
) в вызов функции - распространение в литерал массива
- распространение в объектный литерал
- выписка
- состояний Обещания
-
статический
- статический импорт
- статических против динамических
- строгий режим
- строка
-
Строка()
- подкласс
- подкласс
- вычитание
- суперкласс
-
переключатель
- символ Символ
- , общеизвестный
- синхронный генератор
- синхронный итеративный
- синхронная итерация
- синхронный итератор
- синтаксис
T
- шаблон с тегами
- очередь задач
- ТС39
- Процесс TC39
- ТДЗ (временная мертвая зона)
- Технический комитет 39
- литерал шаблона
- временная мертвая зона
- тернарный оператор
-
этот
-
это
, динамический -
это
, лексический -
это
, значения -
бросок
- значение времени
- раз оператор
- в степени оператора
- запятые в конце литералов массива
- завершающих запятых в JSON
- замыкающие запятые в литералах объектов
- запятые в конце списка параметров
-
правда
- правдивость
- правдивый
-
попробовать
- тип
- иерархия типов
- подпись типа
- Типизированный массив
-
тип
U
-
Uint16Array
-
Uint32Array
-
Uint8Array
-
Uint8ClampedArray
-
не определено
- регистр подчеркивания
- подчеркивание регистр
- Юникод
- Кодовая точка Unicode escape
- Escape-блок кода Unicode
- Формат преобразования Юникода (UTF) Модульный тест
- беззнаковый оператор сдвига вправо
- UTC (Всемирное координированное время)
- UTF (формат преобразования Unicode)
- УТФ-16
- УТФ-32
- UTF-8
В
- сохранение стоимости
- переменная, связанная
- переменная, бесплатная
- переменная, область действия
-
пустота
оператор
Вт
- Слабая карта
-
Слабая карта
-
Слабый набор
- Слабый набор
- Веб-работник
-
, а
-
окно
- типов оболочки (для примитивных типов)
Y
-
выход
(асинхронный генератор) -
выход
(синхронный генератор) -
выход*
(асинхронный генератор) -
выход*
(синхронный генератор)
Z
- Z (Часовой пояс Зулу)
- Часовой пояс Зулу (Z)
indexOf(), find() и include() — JavaScript | by sonia dumitru
Когда использовать методы массива: indexOf(), find() и include():
- Поиск элементов в простом массиве с помощью
Array. prototype.indexOf()
- Поиск элементов в более сложном массив с
Array.prototype.find()
- Определить, содержит ли массив определенное значение среди своих элементов, с помощью основа - найти элементы в массивах. Мы знаем, как хранить данные, но мы также должны иметь возможность получить их снова, когда это необходимо. Поиск элементов в простом массиве с помощью Array.prototype.indexOf()
Описание:
indexOf()
сравниваетsearchElement
с элементами массива, используя строгое равенство (тот же метод, что и оператор===
или тройное равенство).Метод
indexOf()
возвращает первый индекс, по которому данный элемент может быть найден в массиве, или -1, если он отсутствует.Первый параметр, элемент , который вы ищете, является обязательным. Вы также можете передать начальную позицию :
Если вы передаете начальную позицию после искомого элемента или если искомый элемент отсутствует в массиве,
Array. prototype.indexOf()
вернет-1
, чтобы сообщить вам об этом.Поиск элементов в более сложном массиве с помощью
Array.prototype.find()
Описание: метод
find
выполняет функцию обратного вызоваfind
немедленно возвращает значение этого элемента. В противном случаеfind
возвращаетundefined
.обратный вызов
вызывается для каждого индекса массива, а не только тех, которым присвоены значения. Это означает, что он может быть менее эффективным для разреженных массивов по сравнению с методами, которые обращаются только к заданным значениям.Метод
find
не изменяет массив, для которого он вызывается, но функция, предусмотренная для обратного вызоваfind
, устанавливаются до первого вызова обратного вызова-
обратный вызов
не будет посещать какие-либо элементы, добавленные в массив после начала вызоваfind
. - Если существующий, еще не посещенный элемент массива изменен с помощью обратного вызова
find
посещения индекса этого элемента. - Элементы, которые
удалены
, по-прежнему посещаются.
Массив.прототип.найти()
принимает элемент, который мы хотели бы найти, индекс, с которого мы хотели бы начать, и массив, и возвращает первый элемент в массиве, удовлетворяющем условию, задающему условие, указанное функцией.Найти объект в массиве по одному из его свойств, используя функцию стрелки и деструктурирование:
Определить, содержит ли массив определенное значение среди своих элементов с помощью
Array.prototype.includes()
Описание: a
логическое значение
, что равноtrue
, если значениеvalueToFind
найдено в массиве (или в части массива, обозначенной индексомfromIndex
, если он указан). -