JS算法题:查找数组元素位置

昨天笔试,考算法,怎么说呢?一个简单的题目,关于折半查找,我却忘记怎么写了。所以我决定开始偶尔做点算法题。关于笔试的下一篇再写,先详细研究一下。
   
先看牛客网的题目:

题目描述

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

输出描述:

如果数组中存在 item,则返回元素在数组中的位置,否则返回 -1
示例1

输入

[ 1, 2, 3, 4 ], 3

输出

2

这个题目一看就特别简单啊,遍历数组元素,判断数组元素是否与item相等,相等,返回元素位置,否则就返回-1.我的代码如下

function indexOf(arr, item) {
    var arrLength = arr.length;    //储存数组的长度,以免重复使用arr.length
    for(var i = 0;i < arrLength;i++){
        if(arr[i] == item){
            return i;
        }
    }
    return -1;
}

然后看看别人的解法,他们会用indexOf()方法,我对JS并不是很熟悉,所以回去看了看书,顺便总结一下这个东东:EC5为数组实例添加了两个位置方法,indexOf()和lastIndexOf()方法,它们都接收两个参数:要查找的项和(可选的)表示查找起点的索引一个从开始往末尾查找,一个从末尾向前查找。
由于不是所有浏览器都支持该方法。所以回到原题,大牛们都会添加一个判断浏览器是否支持indexOf方法的语句,所以我认为最终最全面的答案是:
function indexOf(arr, item) { if(Array.prototype.indexOf){ //判断是否浏览器是否支持indexOf()方法 return arr.indexOf(item); }else{ var arrLength = arr.length; //储存数组的长度,以免重复使用arr.length
for(var i = 0;i < arrLength;i++){
if(arr[i] == item){
return i;
}
}
} return -1;
}
    
 
  

不支持这个方法那就再用for循环嘛。。


你可能感兴趣的:(Javascript)