JavaScript:如果定义了参数,函数将搜索参数在数组中出现的位置的索引

JavaScript:如果定义了参数,函数将搜索参数在数组中出现的位置的索引,javascript,arrays,loops,search,indexing,Javascript,Arrays,Loops,Search,Indexing,我尝试用JS解决以下问题: 定义一个函数myLastIndexOf,该函数最多接受三个参数: 排列 搜索值 startIdx(可选) myLastIndexOf应返回searchValue在数组中出现的最后一个索引 如果searchValue不在数组中,myLastIndexOf应该返回-1 如果定义了startIdx,myLastIndexOf应该开始在该索引处查找seachValue,然后在查找值时移到数组的前面 这是我的密码: 函数mylastedexof(数组、searchVal

我尝试用JS解决以下问题:

定义一个函数myLastIndexOf,该函数最多接受三个参数:

  • 排列
  • 搜索值
  • startIdx(可选)

  • myLastIndexOf应返回searchValue在数组中出现的最后一个索引

  • 如果searchValue不在数组中,myLastIndexOf应该返回-1

  • 如果定义了startIdx,myLastIndexOf应该开始在该索引处查找seachValue,然后在查找值时移到数组的前面

  • 这是我的密码:

    函数mylastedexof(数组、searchValue、startIdx){
    如果(startIdx!==未定义){
    对于(i=startIdx;i>=0;i--){
    //console.log(数组[i])
    if(数组[i]==搜索值){
    返回i
    }
    }
    }
    else if(startIdx==未定义){
    
    对于(i=0;i3
    您的循环从
    i=0
    开始,它应该从
    i=array.length-1
    开始。并且
    i
    应该减少而不是增加

    函数mylastedexof(数组、searchValue、startIdx){
    如果(startIdx!==未定义){
    对于(设i=startIdx;i>=0;i--){
    //console.log(数组[i])
    if(数组[i]==搜索值){
    返回i
    }
    }
    }
    else if(startIdx==未定义){
    for(设i=array.length-1;i>=0;i--){
    console.log(数组[i])
    if(数组[i]==搜索值){
    返回i
    }
    }
    }
    返回-1;
    }
    
    log(mylastedexof(['gee','gee','gee','gee','gee','baby','baby']','gee'));
    您将在第一次匹配时返回值,您应该在其中存储索引并在最后返回

    函数mylastedexof(数组、searchValue、startIdx){
    设指数=-1;
    如果(startIdx!==未定义){
    对于(i=startIdx;i>=0;i--){
    if(数组[i]==搜索值){
    指数=i
    }
    }
    }
    else if(startIdx==未定义){
    
    对于(i=0;i有几个问题:

  • 当你不需要的时候,你在复制逻辑

  • 您将返回第一场比赛,而不是最后一场比赛

  • 你没有声明你的变量,所以你的代码就是我所说的牺牲品

  • 如果找不到匹配项,则不会返回-1

  • 以下是评论更新:

    函数mylastedexof(数组、searchValue、startIdx){
    //如果未定义'startIdx',请使用数组的结尾
    如果(startIdx==未定义){
    startIdx=array.length-1;
    }
    //宣布“我`
    var i;
    //从'startIdx'向后循环`
    对于(i=startIdx;i>=0;--i){
    if(数组[i]==搜索值){
    //尽早停止循环
    打破
    }
    }
    返回i;//如果找不到,则返回-1
    }
    log(myLastIndexOf(['gee','gee','gee','gee','gee','baby','baby'],'gee'));//=>3
    
    console.log(myLastIndexOf(['gee','gee','gee','gee','gee','gee','baby','baby','gee','2));/=>2,因为startIdx
    您在第一次匹配时返回它自己,代码不返回1,它返回0。啊,您是对的!错过了我应该递减的内容…谢谢:)