Эта статья представляет собой стенограмму моей бесплатной серии YouTube об основах веб-разработки. Если вы предпочитаете смотреть, а не читать, не стесняйтесь посетить мой канал Dev Newbs.

Привет, мои дорогие новички-разработчики со всего мира. Что ж, по правде говоря, на момент записи этой серии у меня еще нет подписчиков, так что технически я разговариваю сам с собой, но это не останавливает меня от грандиозных встреч. Наша ежедневная особенность - это метод lastIndexOf (), и мне нечего добавить, кроме этого, так что приступим.

Метод lastIndexOf () возвращает индекс последнего вхождения указанного строкового значения в искомой строке. По умолчанию поиск происходит в обратном направлении, начиная с последнего индекса искомой строки, двигаясь к индексу 0. При желании мы можем предоставить начальную позицию, которая указывает первую позицию для проверки совпадения с указанной строкой. Метод возвращает индекс, по которому было найдено последнее вхождение указанной строки, или значение -1, если указанная строка не найдена.

Теперь давайте проверим это на примере:

let searchedString = "Hello my fellow fellows! 🙂";
let stringToLookFor = "fellow";
// both case have same range of search
searchedString.lastIndexOf(stringToLookFor)           // 16
// searchedString.length -> 27 - 1 = 26
searchedString.lastIndexOf(stringToLookFor, 26)       // 16
// range for first character is "Hello my fellow f"
searchedString.lastIndexOf(stringToLookFor, 16)       // 16
// range for first character is "Hello my f"
searchedString.lastIndexOf(stringToLookFor, 9)        // 9
// range for first character is "Hello my "
searchedString.lastIndexOf(stringToLookFor, 8)        // -1

Мы ищем позицию последнего вхождения строки «приятель» в первом и втором случае. Мы получаем значение 16, потому что это начальная позиция последнего вхождения указанной строки. Оба варианта практически одинаковы, потому что, если его значение равно или превышает индекс последнего символа в искомой строке, ищется вся искомая строка.

Остальные три случая возвращают 16, 9 a -1 соответственно. Если вы посмотрите на комментарии, которые я оставил над каждой строкой, вы увидите диапазон. Имейте в виду, что это не диапазон для поиска определенной строки, а диапазон, в котором ищется первая единица кода из определенной строки. Таким образом, нам нужна только первая буква «f» слова «парень», чтобы она находилась в этом диапазоне. Помните, что этот метод возвращает начальную позицию последнего вхождения указанной строки. Так что это действительно имеет смысл.

Затем давайте рассмотрим те же самые случаи, когда все зависит от чувствительности к регистру, а также проверим, что происходит, когда мы указываем отрицательное значение в качестве второго необязательного параметра.

let welcomeString = "Hi to my Fellow fellow mellow newbs dewbs! 🙂";
welcomeString.lastIndexOf("Fellow")               // 9
welcomeString.lastIndexOf("fellow")               // 16
welcomeString.lastIndexOf("Mellow")               // -1
welcomeString.lastIndexOf("mellow")               // 23
welcomeString.lastIndexOf("hi", -7)               // -1
welcomeString.lastIndexOf("Hi", -7)               // 0

В первом наборе результатов мы видим, что получаем совершенно разные результаты из-за чувствительности к регистру. То же верно и для второго набора результатов.

В третьем наборе мы видим, что если мы предоставляем отрицательный необязательный параметр для начальной позиции, вместо него используется 0. К счастью для нас, слово «Hi» фактически начинается с позиции 0 указанной строки.

Поскольку параметр начальной позиции равен нулю, он в основном проверяет, начинается ли искомая строка с указанной строки. Это хороший трюк, который может пригодиться в будущем. Так что постарайтесь не забывать об этом.

Ладно, вот и все. А теперь давайте испортим себе день более отвратительным примером. Мы всегда можем попробовать немного поиграть со смайликами, верно?

let smileyFace = "🙂";
// smileyFace:
//   0 -> "\ud83d" 
//   1 -> "\ude42"
smileyFace.lastIndexOf("🙂")                         // 0
smileyFace.lastIndexOf("\ud83d\ude42");              // 0
smileyFace.lastIndexOf("🙂", 1)                      // 0
smileyFace.lastIndexOf("\ude42", 1)                  // 1
// 4 smiley faces:
//   0 -> "\ud83d" 
//   1 -> "\ude42" 
//   2 -> "\ud83d" 
//   3 -> "\ude42" 
//   4 -> "\ud83d" 
//   5 -> "\ude42" 
//   6 -> "\ud83d" 
//   7 -> "\ude42"
"🙂🙂🙂🙂".lastIndexOf('\ude42\ud83d')              // 5
"🙂🙂🙂🙂".lastIndexOf('\ude42\ud83d', 9)           // 5
"🙂🙂🙂🙂".lastIndexOf('\ude42\ud83d', 8)           // 5
"🙂🙂🙂🙂".lastIndexOf('\ude42\ud83d', 7)           // 5
"🙂🙂🙂🙂".lastIndexOf('\ude42\ud83d', 6)           // 5
"🙂🙂🙂🙂".lastIndexOf('\ude42\ud83d', 5)           // 5
"🙂🙂🙂🙂".lastIndexOf('\ude42\ud83d', 4)           // 3
"🙂🙂🙂🙂".lastIndexOf('\ude42\ud83d', 3)           // 3
"🙂🙂🙂🙂".lastIndexOf('\ude42\ud83d', 2)           // 1
"🙂🙂🙂🙂".lastIndexOf('\ude42\ud83d', 1)           // 1
"🙂🙂🙂🙂".lastIndexOf('\ude42\ud83d', 0)           // -1
"🙂🙂🙂🙂".lastIndexOf('\ude42\ud83d', -1)          // -1

Оба результата в первом сете идентичны. Ищем последнее появление смайлика и получаем его. Неважно, как мы написали указанную строку.

Второй набор немного интереснее. Первый результат равен 0, потому что именно здесь начинается смайлик. Во втором результате мы получаем индекс 1 как результат, потому что снова в диапазоне от 0 до 1 последнее вхождение указанной строки находится в позиции 1.

Последний набор результатов немного длиннее, потому что я хотел показать вам, как необязательный параметр изменяет вывод. Объяснять все строки одну за другой немного скучно, поэтому я объясню одну, а остальные вы можете попытаться объяснить самостоятельно в качестве упражнения. Или нет ... Я просто парень из видео, которое вы смотрите. Я не могу заставить тебя делать то, чего ты не хочешь делать.

Хорошо, давайте возьмем строку 86 с необязательным параметром, равным 4. Это означает, что диапазон для поиска последнего вхождения первого символа указанной строки составляет от 0 до 4. Начиная с 4 и возвращается к 0. Когда мы начинаем в позиции 4 мы видим, что значение кодовой единицы отличается от того, что мы ищем. Итак, переход в позицию 3. И… Эврика! Значение кодовой единицы - это то, что мы ищем ... так что просто проверьте оставшуюся часть строки ... да. Они совпадают. Итак, поехали. Нет необходимости продолжать, потому что мы не получим индекс больше этого.

На сегодня все. В следующий раз мы рассмотрим метод localeCompare ().

Спасибо, что оставались со мной до конца, увидимся в следующей статье.