题目描述
找出元素 item 在给定数组 arr 中的位置
输出描述:
如果数组中存在 item,则返回元素在数组中的位置,否则返回 -1
示例1
输入
[ 1, 2, 3, 4 ], 3
输出
2
思路一:简单粗暴的for循环查找
function indexOf(arr, item) {
for(var i = 0; i < arr.length; i++){
if(arr[i] === item){
return i;
}
}
return -1;
}
运行结果
运行时间:157ms
占用内存:14140k
思路二:一条JS方法搞定
function indexOf(arr, item) {
return arr.indexOf(item);
}
运行结果:
运行时间:180ms
占用内存:14140k
思路三:花样玩遍历数组的方法.forEach
function indexOf(arr, item) {
var index = -1;
arr.forEach(function(val,i){
if(val === item && index ===-1){
index = i;
}
});
return index;
}
但是这种方法有两个弊端:
- 首先,
var index = -1在任何情况下都会被执行, 但它是作为保底的, 保底不该被始终执行. - 其次, 因为
.forEach()无法使用 break, 当index = i发生后, 依旧会继续对数组进行遍历, 要一遍遍执行if, 虽然没什么结果, 但后来的这些消耗是毫无必要的.
运行时间:205ms
占用内存:14096k
思路四:结合思路一二
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;
}
}
小Tips
if (Array.prototype.indexOf)这一步是在判断是否支持indexOf,很严谨,老 IE 是没有index of这个方法的- ECMAScript提供了两种方法indexof(),lastindexof(),表示要查找的项和起点位置的索引
本文介绍了四种在数组中查找特定元素的方法,包括简单的for循环、使用indexOf方法、forEach循环及结合前两者的方法,并对比了它们的运行效率。
3231

被折叠的 条评论
为什么被折叠?



