语法格式:

array.indexOf(searchElement[, fromIndex]);

array.lastIndexOf(searchElement[, fromIndex]);

功能:返回某个指定的元素值在数组中首次出现的位置。该方法将从头到尾地检索数组,看它是否含有元素searchElement。开始检索的位置在数组的fromIndex处或数组的开头(没有指定fromIndex时)。如果找到一个相匹配的元素,则返回此元素的第一次出现的位置。如果没有找到,则返回-1。

注意:lastIndexOf方法从数组结束处由后往前搜索。

对于indexOf方法fromIndex的值应当为大于或者等于0的整数;如果为负整数,则返回-1。

对于lastIndexOf方法fromIndex的值也可能为负整数。当为负整数时,表达从结尾的第|fromIndex|个元素开始往前搜索。

举例:
var index = [12, 5, 8, 130, 44].indexOf(8);  //默认从索引0开始搜索,结果index=>2
[12, 5, 8, 130, 44].indexOf(130,1);  //从索引值1处搜索,输出3
[12, 5, 8, 130, 44].indexOf(130,-1);  //输出-1
["Hello"," Hello","Hello "," Hello ","hello"].lastIndexOf('hello',-1); //输出4
["Hello"," Hello","Hello "," Hello ","hello"].lastIndexOf('hello',0); //输出-1
["Hello"," Hello","Hello "," Hello ","hello"].lastIndexOf(' Hello ',-2); //输出3

indexOflastIndexOf方法使用全等(===)来判断一个元素是否存在于数组中。搜索字符串及数字可能没有问题,但是搜索对象和数组可能会有问题。如下的代码片断便给出有力证明:

var arr = [{"name": "Zhang","blog": "http://www.zhang.com"},{"name": "John","blog": "http://www.john.com"},{"name":"李四","blog":"http://www.lisi.com"}
];
var index=arr.indexOf({"name": "Zhang","blog": "http://www.zhang.com"});
console.log("index: ",index);  //输出:index:  -1
var o1={"name": "Zhang","blog": "http://www.zhang.com"},o2={"name":"李四","blog":"http://www.lisi.com"};
var arr_2=[o1,o2];
var index_2= arr_2.indexOf(o2);
console.log("index_2: ",index_2);  //输出:index:  1//Ex3
var arr_3=[[1,2,3],['one','two','three']];
var a1=[1,2,3];
var a2=['one','two','three'];
var index_3=arr_3.indexOf(a1);
console.log("index_3: ",index_3);  //输出:index:  -1var arr_4=[a1,a2];
var index_4=arr_4.indexOf(a1);
console.log("index_4: ",index_4);  //输出:index_4:  0

上面的第1个例子输出结果为-1,为什么?其实问题在于判断两个对象是否相等的问题。JS开发中,判断两个对象是否相等时,只有两个对象指向相同的地址,这两个对象才是相等的;有时,可能存在两个对象的属性和值都相等,但是这两个对象仍然不相等。对于两个数组(也是对象)判断相等,原理同样。

实用工具函数findAll

下面给出一个简单的实用工具函数findAll,基于indexOf,用于找出数组中匹配的所有元素所在下标。此函数返回所有下标组成的数组。

function findAll(arr,value){var results=[],len=arr.length,pos=0;while(pos<len){pos=arr.indexOf(value,pos);if(pos===-1) break;results.push(pos);pos++;}return results;
}
var indice=findAll([,1,2,3,4,5,6,3,,5,7,89,3,2,3],3);
console.log('indice: ',indice);
//结果:indice:  [ 3, 7, 12, 14 ]通用解决方案(适合ECMAScript3和ECMAScript5)
 Array.prototype.indexOf = Array.prototype.indexOf || function (value, start) {if (start && typeof start !== 'number') {throw TypeError(start + ' is not a number');}var start = start || 0,len = this.length;if (start > 0) {start = Math.floor(start);} else if (start < 0) {start = Math.ceil(start) + len;}for (var i = start; i < len; i++) {if (this[i] === value) {return i;}}return -1;};Array.prototype.lastIndexOf = Array.prototype.lastIndexOf || function (value, start) {if (start && typeof start !== 'number') {throw TypeError(start + ' is not a number');}var len = this.length,start = start || len - 1;if (start > 0) {start = Math.floor(start);} else if (start < 0) {start = Math.ceil(start) + len;}for (var i = start; i >= 0; i--) {if (this[i] === value) {return i;}}return -1;};

JavaScript服务器端高级编程(Array.indexOf()和lastIndexOf()方法)相关推荐

  1. javascript字符串方法indexOf、lastIndexOf 方法的使用

    indexOf.lastIndexOf语法 string.indexOf(searchvalue,start) string.lastIndexOf(searchvalue,start) 说明: st ...

  2. javascript学习系列(15):数组中的lastIndexOf方法

    最好的种树是十年前,其次是现在.歌谣 每天一个前端小知识 提醒你改好好学习了 知乎博主 csdn博主 b站博主  放弃很容易但是坚持一定很酷     我是歌谣 喜欢就一键三连咯 你得点赞是对歌谣最大的 ...

  3. lastindexof php,javascript 中查找指定字符串indexOf(),lastIndexOf(),match()

    在javascript中,有以下三个方法均可实现在字符串中查找指定的字符及字符串. str.indexOf(); 此方法:查找字符在字符串对象中第一次出现的位置.存在,则返回字符串所在的位置.不存在, ...

  4. python高级编程 豆瓣_《Python高级编程》读书笔记:方法解释顺序浅析

    Python在2.2引入了New-style object(ref),而且在2.3引入了新的方法解释顺序(Method resolution order,以下简称MRO),新的MRO解决了多继承下的方 ...

  5. JavaScript面向对象编程——Array类型

    概述 一维数组 数组是一个有序的数据集合,可以通过数组名称和索引进行访问.JavaScript中并没有明确的数组数据类型. 二维数组 数组是可以嵌套的,这就意味着一个数组可以作为一个袁旭被包含在另一个 ...

  6. JavaScript indexOf() 方法 和 lastIndexOf() 方法

    indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置. lastIndexOf() 方法可返回一个指定的字符串值最后出现的位置,在一个字符串中的指定位置从后向前搜索. 语法: in ...

  7. day04--java高级编程:API:Object、String,Buffer、包装类、日期、java比较器、BigInteger、进制、length区别,IO流,路径,序列化id,编码

    1 API 1.1 Api文档下载 1.API (Application Programming Interface,应用程序编程接口)是 Java 提供的基本编程接口,一切可以调用的东西都是API. ...

  8. Java高级编程之常用类

    一.String类 java.lang.String类的使用 (一)概述 String: 字符串,使用一对""引起来表示. String声明为final的,不可被继承 String ...

  9. JavaScript 高级编程(二)

    JavaScript 高级编程(二) BOM 一套操作浏览器的API. 常见对象 window: 代表整个浏览器窗口 注意: window是BOM中的一个对象, 并且是一个顶级的对象(全局) Navi ...

  10. JavaScript高级编程 III

    原文地址:http://www.onlamp.com/pub/a/onlamp/2007/11/20/advanced-javascript-iii.html JavaScript高级编程I:http ...

最新文章

  1. 在jsp调试后端绑定对象
  2. mysql与sqlserver之间的关系转换
  3. Javascript Step by Step - 03
  4. 关于.net core http error 502.5 - process failure
  5. 两个软件相互交换数据_六轴算法机软件使用说明
  6. [ An Ac a Day ^_^ ] CodeForces 468A 24 Game 构造
  7. Python(6)-算数运算符
  8. Android Studio 快速实现上传项目到Github(详细步骤)
  9. 关于VLAN的几种接口模式
  10. 骨传导耳机靠谱吗?骨传导耳机是不是智商税?
  11. oracle sysdate毫秒,oracle systimestamp(sysdate)到毫秒
  12. ftp下载工具绿色版,绿色版ftp下载工具好用推荐
  13. 计算机界面没磁盘驱动器,请将磁盘插入驱动器,电脑提示驱动器中没有磁盘怎么办...
  14. ubuntu下安装搜狗拼音输入法
  15. 域控策略之用户或计算机组策略例外配置
  16. 爬取网易云音乐所有歌单信息
  17. linux 一次io大小,linux – AWS EBS中IO操作(IOP)的大小是多少?
  18. xml中处理大于号小于号的方法(Mybatis中大于、小于)
  19. 谷歌灵魂拷问What If;加拿大团队实验公式相声;脸书启用Deepfake视频
  20. PCB地与机壳电容连接 转

热门文章

  1. Java - 多线程Callable、Executors、Future
  2. C++中类的继承和组合
  3. ubuntu以安装包方式安装jdk13
  4. 腾讯php定位地图代码,腾讯地图定位及坐标解析
  5. 力扣-1143 最长公共子序列/1035 不相交的线
  6. 一、tomcat9解压后运行startup.bat闪退
  7. PHP微信公众号开发常用功能
  8. 一些实用的方法整理(与语言无关)
  9. 多表连接的三种方式 HASH MERGE NESTED
  10. 不同VLAN间的通信