zoukankan      html  css  js  c++  java
  • 一个js获取数组下标的函数

      或许,面试的时候,你可能会被问到怎么模拟字符串的indexOf()函数获取数组的下标,这里是个人实现的一个小函数,里面包含的知识点挺多的,假如是新手,看不懂的地方可以百度,这里就不做详细介绍了,当然,看不懂也可以给我留言,有空会回复你的。

    /*
        获取数组元素的下标,
        第一个参数为数组的元素,可为复合类型,但不能为函数和undefined,也不能为空
        第二个参数,要从哪个位置向后查找,
        负数为从后面位置查找,查找的方向依然是向后查找,
        比如说-1,就是最后的位置向后查找,也就是只能和最后一个元素相匹配
        */
        Array.prototype.indexof=function(value,fromindex){
            var arr = this.valueOf(),len=this.length;
            //如果arr不是数组或者第一个参数为空或者undefined,则返回false
            if(toString.call(arr) !== '[object Array]' || value === '' || value === undefined || toString.call(value) === '[object Function]'){
                return false;
            }
            //默认第一个参数为0
            if(fromindex === undefined){
                fromindex = 0;
            }
            //第二个参数不是数字返回false
            if(toString.call(fromindex) !== '[object Number]'){
                return false;
            }
            //判断第二个参数是否为负数
            if(fromindex<0){
                fromindex = Math.abs(fromindex);
                //超过搜索范围
                if(len < fromindex){
                    return -1;
                }else{
                    //负数则从后面开始向后搜索
                    fromindex = len - fromindex;
                }
            }
            //开始查找
            for(var i=0+fromindex;i<len;i++){
                if(value === arr[i]){
                    return i;
                }else{
                    //判断数据类型相等
                    if(toString.call(arr[i]) === toString.call(value)){
                        //判断数据值相等
                        if(JSON.stringify(arr[i]) === JSON.stringify(value)){
                            return i;
                        }else{
                            return -1;
                        }
                    }    
                }
            }
            return -1;
        }
        //测试
        var arr1 = [1,9,0,'w',4,5,[1,6],{'u':1,'a':2},null];
        var ob = {'u':1,'a':2};
        var ob1 = {'u':1,'a':3};
        var get=function(){};
        var a = [1];
        var b = [1,6];
        alert(arr1.indexof(b));

      依然那句老话,如果有错误或着bug,还望看官提出,免得误导其他人。

  • 相关阅读:
    batch build OSG
    COM技术内幕第八章笔记组件复用
    在Fireworks CS5中使用PS滤镜
    不能载入ive场景
    转:lib,dll和h
    想不到的.ive
    显卡始终只支持OPENGL1.1
    初识3D JavaScript接口
    32位CPU寄存器简介以及TSS和TR
    3dsMax的Intervals
  • 原文地址:https://www.cnblogs.com/loveyoume/p/6142843.html
Copyright © 2011-2022 走看看