一个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代码会至上而下一条线执行下去,但是有时候我们需要等到一个操作结束之后再进行下一个操作,这时候就需要用到回调函数. 二. 回调函数的解释 因为 ...
随机推荐
- navigation和tabbar上的文字.图片 自定义
[[UITabBarItem appearance] setTitleTextAttributes:@{ UITextAttributeTextColor : [UIColor blackColor] ...
- singleton pattern的推荐实现
一.单例模式的C#实现: (1)使用double-checked locking的方式: public sealed class Singleton { private static volatile ...
- 【dom4j xml】使用dom4j处理XML文件--测试过程遇到的问题
首先 关于dom4j的API,有如下: 当然 其中的实体引用有以下: 测试使用环境: 使用Maven搭建web环境,pom.xml文件配置如下: <project xmlns="ht ...
- STM32F051芯片解密STM32F091IC解密STM32F042单片机破解多少钱?
STM32F051芯片解密STM32F091IC解密STM32F042单片机破解多少钱? STM32F0系列解密的芯片: STM32F031解密 | STM32F051解密 | STM32F091解密 ...
- POJ 2559 Largest Rectangle in a Histogram ——笛卡尔树
[题目分析] 本来是单调栈的题目,用笛卡尔树可以快速的水过去. 把每一个矩阵看成一个二元组(出现的顺序,高度). 然后建造笛卡尔树. 神奇的发现,每一个节点的高度*该子树的大小,就是这一块最大的子矩阵 ...
- OOP: One pont of view of OOP与基于算法设计的区别
..摘自<C++网络编程 卷1:运用ACE和模式消除复杂性> <C++ Network Programming Volume 1 Mastering Complexity with ...
- CentOS两台服务器利用scp拷贝文件
yum install -y openssh-clients scp -r -P 26611 /usr/local/ssdb-20160518/ root@10.10.6.199:/usr/local ...
- Mac下抓包
Wireshark针对UNIX Like系统的GUI发行版界面采用的是X Window(1987年更改X版本到X11).Mac OS X在Mountain Lion之后放弃X11,取而代之的是开源的X ...
- OSG中找到特定节点的方法
OSG中找到特定节点的方法 转自:http://38288890.blog.163.com/blog/static/19612845320072721549504/ 为了在OSG中找到需要的节点并对节 ...
- StringUtils中的常用的方法
org.apache.commons.lang.StringUtils中常用的方法,这里主要列举String中没有,且比较有用的方法: 1. 检查字符串是否为空: static boolean isB ...