Array.prototype.lastIndexOf()
lastIndexOf() 方法用于 Array 实例,它会查找数组中给定元素最后出现的位置索引,如果未找到,则返回 -1。该方法从 fromIndex 指定的位置开始向数组的开头进行搜索。
试一试
const animals = ["Dodo", "Tiger", "Penguin", "Dodo"];
console.log(animals.lastIndexOf("Dodo"));
// Expected output: 3
console.log(animals.lastIndexOf("Tiger"));
// Expected output: 1
语法
js
lastIndexOf(searchElement)
lastIndexOf(searchElement, fromIndex)
参数
searchElement-
要查找的元素。
fromIndex可选-
搜索开始位置的基于零的索引,该索引会被 转换为整数。
- 负数索引表示从数组末尾开始计数 — 如果
-array.length <= fromIndex < 0,则使用fromIndex + array.length。 - 如果
fromIndex < -array.length,则不会搜索该数组,并返回-1。你可以将其想象为从数组开头之前一个不存在的位置开始向后搜索。途中没有数组元素,因此永远找不到searchElement。 - 如果
fromIndex >= array.length或fromIndex被省略或为undefined,则使用array.length - 1,这将导致搜索整个数组。你可以将其想象为从数组末尾之后一个不存在的位置开始向后搜索。它最终会到达数组的实际末尾位置,然后开始通过实际的数组元素向后搜索。
- 负数索引表示从数组末尾开始计数 — 如果
返回值
数组中 searchElement 的最后一个索引;如果未找到,则为 -1。
描述
lastIndexOf() 方法使用 严格相等(strict equality)(与 === 运算符算法相同)来比较 searchElement 与数组中的元素。NaN 值永远不会被视为相等,因此当 searchElement 是 NaN 时,lastIndexOf() 始终返回 -1。
lastIndexOf() 方法会跳过 稀疏数组(sparse arrays) 中的空位。
lastIndexOf() 方法是 通用的(generic)。它只要求 this 值具有 length 属性和整数键属性。
示例
使用 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® 2026 语言规范 # sec-array.prototype.lastindexof |
浏览器兼容性
加载中…