一个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,还望看官提出,免得误导其他人。
一个js获取数组下标的函数的更多相关文章
- 在js文件里调用另一个js文件里的函数
这个是我今天解决的一个小问题,我在创建界面的时候,根据不同的界面需求对应创建了不同的js文件来搭建界面,搭建完毕之后再将各个生成页面的函数汇总到主界面上,通过visibility属性切换显示,这时候出 ...
- WebView中Js与Android本地函数的相互调用
介绍 随着Html5的普及,html在表现力上不一定比原生应用差,并且有很强的扩展兼容性,所以越来越多的应用是采用Html与Android原生混合开发模式实现. 既然要实现混合开发,那么Js与Andr ...
- js中如何在一个函数里面执行另一个函数
1.js中如何在函数a里面执行函数b function a(参数c){ b(); } function b(参数c){ } 方法2: <script type="text/javasc ...
- Js文件函数中调用另一个Js文件函数的方法
在项目中Js文件需要完成某一功能,但这一功能的大部分代码在另外一个Js文件已经完成,只需要调用这个文件实现功能.那么如何调用:一个Js文件函数中调用另一个Js文件函数的方法? (直接代码说明) 示例d ...
- javascript中,一个js中的函数,第一句var _this = this;为什么要这样做?
javascript中,一个js中的函数,第一句var _this = this;为什么要这样做? 下面是源码: 下面这段代码是常用的网站首页,自动切换span或者tabbar来变更List显示内容的 ...
- js parseInt和map函数
今天看了一个js的题目["1","2","3"].map(parseInt),看到后脑海中浮现的答案是[1,2,3],但是看到正确答案后蒙了 ...
- 【Mocha.js 101】钩子函数
前情提要 在上一篇文章<[Mocha.js 101]同步.异步与 Promise>中,我们学会了如何对同步方法.异步回调方法以及 Promise 进行测试. 在本篇文章中,我们将了解到 M ...
- JS魔法堂:函数重载 之 获取变量的数据类型
Brief 有时我们需要根据入参的数据类型来决定调用哪个函数实现,就是说所谓的函数重载(function overloading).因为JS没有内置函数重载的特性,正好给机会我们思考和实现一套这样的机 ...
- js中的回调函数的理解和使用方法
js中的回调函数的理解和使用方法 一. 回调函数的作用 js代码会至上而下一条线执行下去,但是有时候我们需要等到一个操作结束之后再进行下一个操作,这时候就需要用到回调函数. 二. 回调函数的解释 因为 ...
随机推荐
- TCP协议三次握手和四次挥手
http://www.cnblogs.com/rootq/articles/1377355.html TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对 ...
- mac
command+R 刷新页面 command+shift+C 我的电脑 finder->应用程序 -> 实用程序 -> 终端 打开 cmd command+F3 显示桌面 comma ...
- cve-2015-5199漏洞分析
继续之前hackteam的flash漏洞,这次的对象为cve-2015-5199,遂做一下记录. 首先,在该exp中TryExpl函数为漏洞的触发函数,该函数也为本次调试的主要对象,函数的开始首先创建 ...
- CSS3动画效果-7.13
例如: <body> <div class="div1"></div> </body> CSS: @keyframes myfirs ...
- MVC和WebForm 中国省市区三级联动
MVC和WebForm是微软B/S端的两条腿,两种不同的设计理念,相对来说MVC更优于WebForm对于大数据的交互,因为WebForm是同一时间传输所有数据,而MVC它只是传输所用到的数据,更精确, ...
- [LeetCode] Single Number
Given an array of integers, every element appears twice except for one. Find that single one. Note: ...
- 首师大附中互测题:50136142WXY的坑爹百度地图【B006】(可以喝的超大桶水)
[B006]50136142WXY的坑爹百度地图[难度B]——————————————————————————————————————————————————————————————————————— ...
- Linux下搭建个人网站
前不久在阿里买了一个服务器,然后开始第一次尝试搭建自己的个人网站.前端采用了bootstrap框架,后端采用的是PHP,数据库使用的是Mysql.新手第一次在linux下搭建遇见很多问题,在这里分享一 ...
- AngularJS Moudle 函数讲解
AngularJS中的Module类负责定义应用如何启动,它还可以通过声明的方式定义应用中的各个片段.我们来看看它是如何实现这些功能的. 一.Main方法在哪里 如果你是从Java或者Python编程 ...
- PHP 学习笔记---基本语法
------php语言与JavaScript的使用 方法是相似 <script type="text/javascript"> </script>--js与 ...