Jump to content
  • 0

indexof и lastIndexOf


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 post
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 post
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 post
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 post
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 post
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.

  • Комментарии

    • alert('2' + submit.value) нужно было делать внутри request.onreadystatechange, потому что именно там приходит значение с сервера и задаётся value у submit. И через сколько времени это произойдёт, не всегда известно, может и через минуту, если интернет медленный, поэтому таймаутами универсально не побороть.
    • Я не уверен, что у формы есть событие input, но если даже было бы, то переменные result, num1 и num2 не определены. Они были бы созданы автоматически, если бы это были id, но у тебя-то name. И я не в курсе, сейчас можно писать js-код в атрибутах без javascript: спереди? И есть ли у тега <output> свойство value? Может быть, у него textContent? Подключи Vue, там будет работать так, как ты хочешь, только придётся несколько дополнительных действий сделать, привязывая переменные к инпутам и создавая computed-свойство.
    • В телеграме картинка есть, вконтакт тоже показывает, даже в аське есть. Видимо, ты как-то не так проверяешь.
    • Понял, спасибо большое. Я просто думал, что если выбран класс, то и применяяется только к конкретному классу, а оказывается не правильно думал. Еще раз спасибо
    • Добрый день! Есть такая страница http://tehne.com/grant/right-bank-of-kazanka-river-competition-2021-ru Хочу сделать чтобы в мессенджерах когда отправляют ссылку вместе с заголовком показывалась определенная картинка. Я добавил эту картинку в мета тэги og и link rel="image_src"  и она все равно не появляется когда делюсь в мессенджерах Почему так?  
×
×
  • 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.