题目原本是这样描述的:
找出元素 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