Если аргумент предложения содержит аргумент searchValue, верните индекс, с которого начинается searchValue -> Ошибка

#javascript #string #if-statement #search #indexing

#javascript #строка #if-оператор #Поиск #индексирование

Вопрос:

Я попытался решить проблему ниже:

Мой индекс Of: Определите функцию myIndexOf, которая принимает три аргумента:

  • источник (строка)
  • searchValue (строка)
  • startIdx (число) — необязательно

Если источник содержит searchValue, верните индекс, с которого начинается searchValue.

Если searchValue появляется в источнике более одного раза, верните индекс из первого появления searchValue. Если значение поиска не существует в источнике, верните -1.

Если в функцию передан startIdx, игнорируйте любые экземпляры searchValue, которые встречаются перед этим индексом. Если startIdx не предоставлен, начните поиск с начала исходного кода.

Не используйте встроенный строковый метод .indexOf в вашем ответе.

Я попробовал следующий код:

 function myIndexOf(source, searchValue, startIdx=0){

  for (i=startIdx; i<=source.length - searchValue.length; i  ){

    //console.log(source[i])

    let subString = source.slice(i, i searchValue.length);

    if(subString === searchValue){
      return i
    }
    else {
      return -1
    }
  }
}

myIndexOf('twice twice', 'ice', 5);
  

Функция должна возвращать 8, но вместо этого она возвращает -1. Я знаю, что, вероятно, ошибка вызвана оператором else, но я не понимаю, почему оператор else не может быть там, где он есть.

Ответ №1:

Проблема в том, что цикл for заканчивается после первой итерации. При наличии блока else вся функция преждевременно завершает свое выполнение (и, следовательно, цикл for), поскольку, независимо от выполняемого условия, она возвращает значение.

Попробуйте это:

 function myIndexOf(source, searchValue, startIdx=0){

  for (i=startIdx; i<=source.length - searchValue.length; i  ) {

    let subString = source.slice(i, i searchValue.length);

    if(subString === searchValue){
      return i;
    }

  }

  return -1;    

}
  

В приведенной выше функции цикл for остановится, только если будет найдено искомое значение. Если он так и не найден, функция вернет значение -1 по умолчанию.