查找数组元素位置

题目原本是这样描述的:

找出元素 item 在给定数组 arr 中的位置

输出的数据要求是:

如果数组中存在item,则输出在数组中的位置,否则输出-1

输入:[1,2,3,4],3

输出:2


解决方案有以下三种:

第一种:

function indexOf(arr,item){

return arr.indexOf(item);

}

是的,indexOf()方法返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1。

第二种:如果浏览器不支持indexOf怎么办呢?

function indexOf(arr, item) {
  if (Array.prototype.indexOf){   //判断当前浏览器是否支持
      return arr.indexOf(item);
  } else {
      for (var i = 0; i < arr.length; i++){
          if (arr[i] === item){
              return i;
          }
      }
  }     
  return -1;     //总是把return -1暴漏在最外层
}


是的,第二种方法是考虑很周全的。


反思自己:

当时我自己的思路是在第二种方法中使用forEach()来便利,刚开始还得意洋洋,后来我放在Console中测了一下情况大不妙。

function indexOf(arr, item) {
    if([].indexOf){
console.log(2000,'jinlai');
        return arr.indexOf(item);
    }else {
        arr.forEach(function(ele,index){
            if (ele === item){
                return index;
            }
        });
         return -1;
    }
   
}    
indexOf([1,2,3,4],3);
2000 "jinlai"
2

看上边输出log - 2000,说明了一直走的[].indexOf()


不着急,我把if删掉只留下else的内容:

function indexOf(arr, item) {
        arr.forEach(function(ele,index){
            if (ele === item){
                return index;
            }
console.log(3333,ele);
        });
        return -1;
}    
indexOf([1,2,3,4],3);
3333 1

3333 2

3333 4

-1

可以看出当forEach中即使查找出来了3这个值,return也不会使其停止遍历数组。

并仍会输出-1。看了后是不是彻底醉了,如果不做测试是不是当放到非兼容环境下就会出错了呢?

所以呢!大家伙在使用forEach做便利看起来是方便了,但是要合理利用噢!

for循环虽说大众化了一些,暂时还是先选择for循环。


这里详细讲解了Array.prototype.indexOf

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值