或许,面试的时候,你可能会被问到怎么模拟字符串的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,还望看官提出,免得误导其他人。

一个js获取数组下标的函数的更多相关文章

  1. 在js文件里调用另一个js文件里的函数

    这个是我今天解决的一个小问题,我在创建界面的时候,根据不同的界面需求对应创建了不同的js文件来搭建界面,搭建完毕之后再将各个生成页面的函数汇总到主界面上,通过visibility属性切换显示,这时候出 ...

  2. WebView中Js与Android本地函数的相互调用

    介绍 随着Html5的普及,html在表现力上不一定比原生应用差,并且有很强的扩展兼容性,所以越来越多的应用是采用Html与Android原生混合开发模式实现. 既然要实现混合开发,那么Js与Andr ...

  3. js中如何在一个函数里面执行另一个函数

    1.js中如何在函数a里面执行函数b function a(参数c){ b(); } function b(参数c){ } 方法2: <script type="text/javasc ...

  4. Js文件函数中调用另一个Js文件函数的方法

    在项目中Js文件需要完成某一功能,但这一功能的大部分代码在另外一个Js文件已经完成,只需要调用这个文件实现功能.那么如何调用:一个Js文件函数中调用另一个Js文件函数的方法? (直接代码说明) 示例d ...

  5. javascript中,一个js中的函数,第一句var _this = this;为什么要这样做?

    javascript中,一个js中的函数,第一句var _this = this;为什么要这样做? 下面是源码: 下面这段代码是常用的网站首页,自动切换span或者tabbar来变更List显示内容的 ...

  6. js parseInt和map函数

    今天看了一个js的题目["1","2","3"].map(parseInt),看到后脑海中浮现的答案是[1,2,3],但是看到正确答案后蒙了 ...

  7. 【Mocha.js 101】钩子函数

    前情提要 在上一篇文章<[Mocha.js 101]同步.异步与 Promise>中,我们学会了如何对同步方法.异步回调方法以及 Promise 进行测试. 在本篇文章中,我们将了解到 M ...

  8. JS魔法堂:函数重载 之 获取变量的数据类型

    Brief 有时我们需要根据入参的数据类型来决定调用哪个函数实现,就是说所谓的函数重载(function overloading).因为JS没有内置函数重载的特性,正好给机会我们思考和实现一套这样的机 ...

  9. js中的回调函数的理解和使用方法

    js中的回调函数的理解和使用方法 一. 回调函数的作用 js代码会至上而下一条线执行下去,但是有时候我们需要等到一个操作结束之后再进行下一个操作,这时候就需要用到回调函数. 二. 回调函数的解释 因为 ...

随机推荐

  1. 安天AVLTeam送福利喽~~

    #福利来了#  duang~duang~duang~ 安小天帮你辨别短信真伪!!! 是不是经常收到真假难辨的[疑似诈骗短信]是真的?是假的? 傻傻分不清楚 现在不用怕啦!!! 遇到这种情况,只需手机截 ...

  2. 与你相遇好幸运,mocha接口测试

    var rest = require('restler');var assert = require("assert");var systemID;var userID; cons ...

  3. 为什么kafka使用磁盘而不是内存

    Kafka最核心的思想是使用磁盘,而不是使用内存,可能所有人都会认为,内存的速度一定比磁盘快,我也不例外.在看了Kafka的设计思想,查阅了相应资料再加上自己的测试后,发现磁盘的顺序读写速度和内存持平 ...

  4. 修改tomcat服务器banner的方法

    对于工作中经常使用tomcat的童鞋来说,已经很习惯地看到tomcat看到下图: 但是在实际场景中,这个Banner给入侵者提供了一定的指示作用.为了安全起见,要求更改这个信息,以起到一定的迷惑作用. ...

  5. Codeforces118D Caesar's Legions(DP)

    题目 Source http://codeforces.com/problemset/problem/118/D Description Gaius Julius Caesar, a famous g ...

  6. 【BZOJ】3832: [Poi2014]Rally

    题意 \(n(2 \le n \le 500000)\)个点\(m(1 \le m \le 1000000)\)条边的有向无环图,找到一个点,使得删掉这个点后剩余图中的最长路径最短. 分析 神题不会做 ...

  7. 随堂笔记javascript篇之chrome调试:

    在征求到许老师的同意之后,我用javascript脚本语言来完成我的课堂作业,初学一门语言,刚开始也许是初生牛犊不怕虎,接受一门新的语言而且用来完成作业.一开始老师是拒绝的,他说我这样是太麻烦了.对于 ...

  8. 【Alpha】Daily Scrum Meeting第四次

    之前没领悟到Daily Scrum Meeting的精髓,认为要做出些东西才敢拿出来. 在范老师提醒我们保持有节奏的迭代后,我们意识到之前的想法是不符合Daily Scrum Meeting的思想的. ...

  9. UI测试测试分析

    解析:jQuery easyUI是基于jQuery框架在使用之前应该先引入jquery框架否则jQuery easyUI 将失效故D错误 解析: JQuery UI下的menu插件的使用,menu提供 ...

  10. JS仿淘宝星星评价

    //直接复制过去就可以了(你也可以吧css和js封装成css和js文件导入). <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transit ...