Jump to content
  • 0

indexof и lastIndexOf


denis_alekss
 Share

Question

Непонятно каким образом происходит поиск через indexOf и lastIndexOf
 если присутствует второй отрицательный элемент массива.
Написал для примера код:
 

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>Тест</title>
 </head>
 <body>  
<p id="result"></p>

    <script>
var scores = [10,300, 500, 10, 70, 20, 100, 30, 100, 40, 20, 10];
const arrNames = ["Вася","Петя","Коля","Джулия",
"Ефросинья","Степан","Борис","Антон","Остап"];

//Ищет с нулевого элемента по конец, первая цифра 20 встречается на 5 индексе
result.innerHTML += (scores.indexOf(20)) + ' <br>';
//Ищет с последнего элемента по начало, первую цифру 20 встречается на 10 индексе
result.innerHTML += (scores.lastIndexOf(20)) + ' <br>';

result.innerHTML += (scores.indexOf(20, -2)) + ' <br>';
result.innerHTML += (scores.lastIndexOf(20,-2)) + ' <br>';

  </script>
 </body>
</html>

 


Интересует вывод последних 2-ух строк со вторым отрицательным параметром в indexOf и lastIndexOf. Откуда идет отсчет и как он идет если есть второй отрицательный элемент в параметре, я про цифру -2.

 

Edited by denis_alekss
Link to comment
Share on other sites

5 answers to this question

Recommended Posts

  • 0
10 часов назад, denis_alekss сказал:

Откуда идет отсчет

Отсчет идет с указанного элемента, т.е. в вашем случае со второго с конца. Причем указанный индекс включается в поиск. Например если бы вы искали в arrNames строку "Антон" начиная с минус второго элемента то вам бы вернулся индекс этого элемента (в вашем случае 7) так как он подходит под условие.

Ну или применительно к scores использование и scores.indexOf(20, -2) и scores.lastIndexOf(20, -2) вернет вам цифру 20 которая встречается на 10 индексе

10 часов назад, denis_alekss сказал:

как он идет

Точно так же как если бы индекс был бы положительным. indexOf ищет совпадение слева направо начиная с указанного элемента до первого совпадения или до конца массива, lastIndexOf ищет совпадение справа налево начиная с указанного элемента до первого совпадения или до начала массива.

  • Like 1
Link to comment
Share on other sites

  • 0

Вот массив с которым мы работаем:

var scores = [10,300, 500, 10, 70, 20, 100, 30, 100, 40, 20, 10];

scores.indexOf(20, -2) -  со второго элемента с конца массива, это число 20 идет поиск первого совпадения? Ищет со второго элемента с конца включая его, верно? Второй элемент с конца массива является предпоследним, под индексом 10.

scores.lastIndexOf(20,-2) стратегия такая же самая, начинается поиск со второго элемента с конца, включая его? Ведь результат такой же, также выводит индекс 10.

 

Если написать такую строку:

scores.lastIndexOf(10,-5)

 

правильно я понимаю, что 5 элемент с конца, это цифра 30, включая ее, с нее стартует поиск к началу массива? И что первое на пути с конца вначало совпадет с цифрой 30, тот и индекс выведется? Даже если эти цифр 30 будет 8 раз на пути к началу массива?

Получается отрицательный второй -2 не важно стоит в indexOf или lastIndexOf ищется с конца массива к началу?

Такое дело и со строками, не только с числами?

 

indexOf с конца идет вправо, а lastIndexOf c конца идет влево искать элемент..

Edited by denis_alekss
Link to comment
Share on other sites

  • 0
12 часов назад, denis_alekss сказал:

Ведь результат такой же, также выводит индекс 10.

Все ваши рассуждения выше  этой строки верны. 

12 часов назад, denis_alekss сказал:

И что первое на пути с конца вначало совпадет с цифрой 30, тот и индекс выведется?

Только не 30,а 10 Ведь вы ищете scores.lastIndexOf(10,-5)  так все правильно

12 часов назад, denis_alekss сказал:

Получается отрицательный второй -2 не важно стоит в indexOf или lastIndexOf ищется с конца массива к началу?

Нет. indexOf всегда ищет слева направо от указанного элемента или от начала массива, если второй параметр (в данном случае -2) не указан, до первого совпадения. Если совпадение не было найдено до конца массива то возвращает -1

lastIndexOf всегда ищет справа налево от указанного элемента (или от конца массива если не указан второй параметр) до первого совпадения. Если совпадение не было найдено до начала массива то возвращает -1

12 часов назад, denis_alekss сказал:

Такое дело и со строками, не только с числами?

Да. Только не забывайте что поиск по строкам регистрозависимый. Т.е.
'Тестовая строка'.indexOf('тестовая') вернет -1

12 часов назад, denis_alekss сказал:

indexOf с конца идет вправо, а lastIndexOf c конца идет влево искать элемент..

Тут видимо опечатка? 🙂  Если не указан индекс с которого начинать поиск то indexOf с начала идет вправо.  Про lastIndexOf верно.

Link to comment
Share on other sites

  • 0
16 минут назад, denis_alekss сказал:

Элементов 12, а индекс максимальный 11.
lastIndexOf(20, -2) ищет с 10 по 0
indexOf(20, -2) ищет с 10 по 12

Все верно, только если брать индексы, то indexOf(20, -2) ищет с 10 по 11

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Обсуждения

    • Всем привет! Хотела бы представить свою работу новичка на обсуждение для получения конструктивной критики и/или советов, взглядов что можно улучшить или изменить, общее впечатление, конечно, тоже интересует.   https://alesia-k.github.io/Tajam-template/ Обратите, пожалуйста, внимание на: - блок "MEET OUR AMAZING TEAM". Немного не нравится как смещаются item при наведении мыши, как будто немного дергаются. Так ли по-вашему это должно работать или такое поведение блока нужно изменить? - инпут "subscribe" в футторе. При клике на инпут, немного смещается и сам инпут, и рядом стоящая кнопка. Было бы классно, если бы подкинули идею как сделать, чтобы такого не было. - и почему-то при клике на <a href="tel:(+62)2122243333">(+62)21-2224 3333</a>   не идет процесса соединения. Заранее спасибо!
    • Попробуйте убрать стиль: html.pum-open.pum-open-overlay, html.pum-open.pum-open-overlay.pum-open-fixed .pum-overlay { /* overflow: hidden; */ } в файле "pum-site-styles.css?generated=1634785690&ver=1.16.2"
    • Прошу прощения!! Акроми
    • По одному лишь скриншоту сказать сложно
    • Доброго времени суток. Возникло 4 проблемы, 2 из них решилось при включении внутренних функций отладки плагина. Уже сломал голову выискивая в 1 случае нужный css. 1. При нажатии оставить заявку или на блок в *Наши услуги* появляется черная рамка в окошке (на скрине видно), причем, появляется она рандомно, иногда с 1 раза иногда с 10... При нажатии в окошко она исчезает. 2. Всего на сайте 4 окна, всё в них одинаковое, настройки и шорт код контактной формы, разница только в логотипе и номере. Проблема: При открытии окна *Оставить заявку* страница мотается вверх и открывается окно, при закрытии отматывается обратно на ту часть, где было нажатие кнопки (Хотя отмотки страницы вообще не должно быть, нажал окно просто открылось). Так же есть кликабельные блоки в разделе *Наши услуги*, при нажатии они так же отматывают страницу вверх, а при закрытии не возвращается вниз. С данной проблемой (скорей всего проблема в совместимости скриптов, но в скриптах я полный 0) столкнулся в первые в данном плагине. Буду признателен любой помощи.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy