Array indexOf and lastIndexOf method

本文介绍了JavaScript中数组的方法indexOf和lastIndexOf的使用方法及实现原理,提供了针对IE8及以下版本浏览器不支持这两个方法时的兼容性解决方案。

参见https://developer.mozilla.org/en-US/docs/JavaScript/Reference/global_objects/array/indexof

array.indexOf(searchElement[, fromIndex])

接受一个搜索值(searchElement),将其与数组(array)中的每个元素比较。如果找到该值,返回表示该数组元素的一个索引。如果没有找到,返回-1。

由于IE8不支持indexof,Mozilla针对这一函数的解决方案:

 1 if (!Array.prototype.indexOf) {
 2     Array.prototype.indexOf = function (searchElement , fromIndex ) {
 3         "use strict";
 4         if (this == null) {
 5             throw new TypeError();
 6         }
 7         var t = Object(this);
 8         var len = t.length >>> 0;
 9         if (len === 0) {
10             return -1;
11         }
12         var n = 0;
13         if (arguments.length > 1) {
14             n = Number(arguments[1]);
15             if (n != n) { // shortcut for verifying if it's NaN
16                 n = 0;
17             } else if (n != 0 && n != Infinity && n != -Infinity) {
18                 n = (n > 0 || -1) * Math.floor(Math.abs(n));
19             }
20         }
21         if (n >= len) {
22             return -1;
23         }
24         var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);
25         for (; k < len; k++) {
26             if (k in t && t[k] === searchElement) {
27                 return k;
28             }
29         }
30         return -1;
31     }
32 }
33 
34 var array = [2, 5, 9];
35 var index = array.indexOf(5); // index is assigned 0
36 alert(index);
37 //index = array.indexOf(7); // index is assigned -1

 

array.lastIndexOf(searchElement[, fromIndex]);

 1 if (!Array.prototype.lastIndexOf)
 2 {
 3   Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/)
 4   {
 5     "use strict";
 6 
 7     if (this == null)
 8       throw new TypeError();
 9 
10     var t = Object(this);
11     var len = t.length >>> 0;
12     if (len === 0)
13       return -1;
14 
15     var n = len;
16     if (arguments.length > 1)
17     {
18       n = Number(arguments[1]);
19       if (n != n)
20         n = 0;
21       else if (n != 0 && n != (1 / 0) && n != -(1 / 0))
22         n = (n > 0 || -1) * Math.floor(Math.abs(n));
23     }
24 
25     var k = n >= 0
26           ? Math.min(n, len - 1)
27           : len - Math.abs(n);
28 
29     for (; k >= 0; k--)
30     {
31       if (k in t && t[k] === searchElement)
32         return k;
33     }
34     return -1;
35   };
36 }

 

 

转载于:https://www.cnblogs.com/laborc/archive/2013/05/09/3068174.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值