如果sentence参数包含searchValue参数,则返回searchValue开始的索引 - > Error

问题描述 投票:0回答:1

我试着解决下面的问题:

我的索引:定义一个接受三个参数的函数myIndexOf:

  • 来源(字符串)
  • searchValue(string)
  • 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语句不能在哪里。

javascript string if-statement search indexing
1个回答
0
投票

问题是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。

© www.soinside.com 2019 - 2024. All rights reserved.