Array.prototype.lastIndexOf()
lastIndexOf()
是 Array
实例的方法,它返回在数组中找到给定元素的最后一个索引,如果该元素不存在则返回 -1。数组从 fromIndex
开始反向搜索。
试一试
语法
js
lastIndexOf(searchElement)
lastIndexOf(searchElement, fromIndex)
参数
searchElement
-
要在数组中定位的元素。
fromIndex
可选-
从其开始反向搜索的零基索引,转换为整数。
- 负索引从数组的末尾开始反向计数 - 如果
-array.length <= fromIndex < 0
,则使用fromIndex + array.length
。 - 如果
fromIndex < -array.length
,则不搜索数组并返回-1
。你可以将其概念化为从数组开头之前的某个不存在的位置开始,然后从那里反向查找。途中没有数组元素,因此永远找不到searchElement
。 - 如果
fromIndex >= array.length
或省略fromIndex
,则使用array.length - 1
,导致搜索整个数组。你可以将其概念化为从数组末尾之后的某个不存在的位置开始,然后从那里反向查找。它最终会到达数组的实际末尾位置,此时它开始反向搜索实际的数组元素。
- 负索引从数组的末尾开始反向计数 - 如果
返回值
searchElement
在数组中的最后一个索引;如果未找到则返回 -1
。
描述
示例
使用 lastIndexOf()
以下示例使用 lastIndexOf()
在数组中定位值。
js
const 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()
搜索 NaN
。
js
const array = [NaN];
array.lastIndexOf(NaN); // -1
查找元素的所有出现位置
以下示例使用 lastIndexOf
查找给定数组中元素的所有索引,使用 push()
在找到它们时将它们添加到另一个数组中。
js
const indices = [];
const array = ["a", "b", "a", "c", "a", "d"];
const element = "a";
let 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()
方法不同。
在稀疏数组上使用 lastIndexOf()
你不能使用 lastIndexOf()
搜索稀疏数组中的空插槽。
js
console.log([1, , 3].lastIndexOf(undefined)); // -1
在非数组对象上调用 lastIndexOf()
lastIndexOf()
方法读取 this
的 length
属性,然后访问其键为小于 length
的非负整数的每个属性。
js
const arrayLike = {
length: 3,
0: 2,
1: 3,
2: 2,
3: 5, // ignored by lastIndexOf() since length is 3
};
console.log(Array.prototype.lastIndexOf.call(arrayLike, 2));
// 2
console.log(Array.prototype.lastIndexOf.call(arrayLike, 5));
// -1
规范
规范 |
---|
ECMAScript 语言规范 # sec-array.prototype.lastindexof |
浏览器兼容性
BCD 表格仅在启用 JavaScript 的浏览器中加载。