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

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

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

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

Если источник содержит searchValue, вернуть индекс, с которого начинается 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 Ответ

0 голосов
/ 22 марта 2019

Проблема в том, что цикл 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 по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...