array.lastIndexOf

array.lastIndexOf

lastIndexOf()方法返回指定元素(也即有效的 JavaScript 值或变量)在数组中的最后一个的索引,如果不存在则返回 -1。从数组的后面向前查找,从fromIndex处开始。

var numbers = [2, 5, 9, 2]; numbers.lastIndexOf(2 // 3 numbers.lastIndexOf(7 // -1

语法

arr.lastIndexOf(searchElement) arr.lastIndexOf(searchElement, fromIndex)

参数

searchElement被查找的元素。

返回值

数组中最后一个元素的索引,如未找到返回-1。

描述

lastIndexOf使用严格相等(strict equality,即 ===)比较 searchElement 和数组中的元素。

示例

使用 lastIndexOf。

下例使用 lastIndexOf定位数组中的值。

var numbers = [2, 5, 9, 2]; numbers.lastIndexOf(2 // 3 numbers.lastIndexOf(7 // -1 numbers.lastIndexOf(2, 3 // 3 numbers.lastIndexOf(2, 2 // 0 numbers.lastIndexOf(2, -2 // 0 numbers.lastIndexOf(2, -1 // 3

查找所有元素

下例使用 lastIndexOf查找到一个元素在数组中所有的索引(下标),并使用push将所有添加到另一个数组中。

var indices = []; var array = ['a', 'b', 'a', 'c', 'a', 'd']; var element = 'a'; var idx = array.lastIndexOf(element while (idx != -1) { indices.push(idx idx = (idx > 0 ? array.lastIndexOf(element, idx - 1) : -1 } console.log(indices // [4, 2, 0]

注意,我们要单独处理idx==0时的情况,因为如果是第一个元素,忽略了fromIndex参数则第一个元素总会被查找。这不同于indexOf方法

Polyfill

lastIndexOf在 ECMA-262 标准第 5 版被添加。因此它在不兼容该标准的浏览器中可能不被支持。你可以把下面代码添加到脚本中来使那些没有实现该方法的实现环境支持该方法。该算法是被 ECMA-262 第 5 版指定的。假定 ObjectTypeError, Number, Math.floor, Math.abs,以及Math.min拥有其初始值。

// Production steps of ECMA-262, Edition 5, 15.4.4.15 // Reference: http://es5.github.io/#x15.4.4.15 if (!Array.prototype.lastIndexOf) { Array.prototype.lastIndexOf = function(searchElement /*, fromIndex*/) { 'use strict'; if (this === void 0 || this === null) { throw new TypeError( } var n, k, t = Object(this), len = t.length >>> 0; if (len === 0) { return -1; } n = len - 1; if (arguments.length > 1) { n = Number(arguments[1] if (n != n) { n = 0; } else if (n != 0 && n != (1 / 0) && n != -(1 / 0)) { n = (n > 0 || -1) * Math.floor(Math.abs(n) } } for (k = n >= 0 ? Math.min(n, len - 1) : len - Math.abs(n k >= 0; k--) { if (k in t && t[k] === searchElement) { return k; } } return -1; }; }

另外,该实现是为了绝对兼容 Firefox 和 the SpiderMonkey JavaScript 引擎中的lastIndexOf,包括了几种临界情况。如果你要在实际应用中使用该实现,可以忽略这些临界情况,计算from从而简化 fromIndex的计算。

规范

SpecificationStatusComment
ECMAScript 5.1 (ECMA-262)The definition of 'Array.prototype.lastIndexOf' in that specification.StandardInitial definition. Implemented in JavaScript 1.6.
ECMAScript 2015 (6th Edition, ECMA-262)The definition of 'Array.prototype.lastIndexOf' in that specification.Standard
ECMAScript Latest Draft (ECMA-262)The definition of 'Array.prototype.lastIndexOf' in that specification.Living Standard

浏览器兼容性

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Basic Support(Yes)(Yes)(Yes)9(Yes)(Yes)

FeatureAndroidChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
Basic Support(Yes)(Yes)(Yes)(Yes)8.1(Yes)(Yes)