JS编程训练 | 题1:查找数组元素位置

题目描述

找出元素 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(),表示要查找的项和起点位置的索引
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值