ZetCode

JavaScript lastIndexOf 方法

最后修改于 2025 年 4 月 4 日

在本文中,我们将展示如何使用 JavaScript 中的 lastIndexOf 方法在数组和字符串中查找元素。

lastIndexOf 方法

lastIndexOf 方法返回给定元素在数组或字符串中最后一次出现时的索引。对于数组,它从末尾向后搜索。对于字符串,它从指定的索引向后搜索。

如果未找到该元素,该方法将返回 -1。对于数组,它使用严格相等 (===) 进行比较。对于字符串,它执行区分大小写的搜索。该方法在 JavaScript 中的 Array 和 String 原型上都可用。

lastIndexOf 方法可以接受一个可选的第二个参数,以指定搜索的起始索引。负值从数组或字符串的末尾向后计数。这使其对于查找元素的最后一次出现很有用。

基本数组 lastIndexOf 示例

以下示例演示了 lastIndexOf 与数组的基本用法。

main.js
const fruits = ['apple', 'banana', 'orange', 'banana', 'kiwi'];
const lastBanana = fruits.lastIndexOf('banana');

console.log(`Last banana at index: ${lastBanana}`);
console.log(`Mango not found: ${fruits.lastIndexOf('mango')}`);

我们创建一个水果数组并搜索 'banana' 的最后一次出现。该方法返回 3,这是最后一个 'banana' 的索引。当搜索 'mango' 时,它返回 -1,因为它在数组中不存在。

$ node main.js
Last banana at index: 3
Mango not found: -1

字符串 lastIndexOf 示例

lastIndexOf 方法在字符串中的工作方式类似。

main.js
const quote = "To be, or not to be, that is the question.";
const lastBe = quote.lastIndexOf("be");

console.log(`Last 'be' at index: ${lastBe}`);
console.log(`Case sensitive search: ${quote.lastIndexOf("Be")}`);

我们搜索一个字符串中 'be' 的最后一次出现。该方法返回找到它的索引。请注意,搜索是区分大小写的,因此搜索 'Be' 会返回 -1,因为它与实际情况不匹配。

$ node main.js
Last 'be' at index: 17
Case sensitive search: -1

使用 fromIndex 参数

lastIndexOf 方法接受一个可选的第二个参数来指定从哪里开始搜索。

main.js
const numbers = [2, 5, 9, 2, 5, 9, 2];
const search1 = numbers.lastIndexOf(2);
const search2 = numbers.lastIndexOf(2, 3);
const search3 = numbers.lastIndexOf(2, -3);

console.log(`Search1: ${search1}`);
console.log(`Search2: ${search2}`);
console.log(`Search3: ${search3}`);

我们演示了使用 fromIndex 参数的不同搜索。第一个搜索找到索引 6 处的最后一个 2。第二个从索引 3 开始,找到索引 3 处的 2。第三个使用负索引,从末尾向后计数。

$ node main.js
Search1: 6
Search2: 3
Search3: 0

使用 lastIndexOf 查找所有出现

我们可以在循环中使用 lastIndexOf 来查找元素的所有出现。

main.js
const data = [1, 2, 3, 4, 2, 5, 2, 6];
const target = 2;
let indices = [];
let currentIndex = data.lastIndexOf(target);

while (currentIndex !== -1) {
    indices.push(currentIndex);
    currentIndex = data.lastIndexOf(target, currentIndex - 1);
}

console.log(`All indices of ${target}:`, indices);

此代码查找数字 2 在数组中出现的所有索引。我们从最后一次出现开始,并向后工作,每次更新搜索位置。循环一直持续到找不到更多出现为止。

$ node main.js
All indices of 2: [ 6, 4, 1 ]

使用 lastIndexOf 进行复杂对象搜索

lastIndexOf 方法使用严格相等性,这会影响它处理对象的方式。

main.js
const obj1 = { id: 1 };
const obj2 = { id: 2 };
const obj3 = { id: 1 };
const objects = [obj1, obj2, obj3, obj1];

console.log(`Last obj1: ${objects.lastIndexOf(obj1)}`);
console.log(`Last obj3: ${objects.lastIndexOf(obj3)}`);
console.log(`Same content but different object: ${objects.lastIndexOf({ id: 1 })}`);

我们演示了 lastIndexOf 如何与对象一起工作。它仅查找引用内存中完全相同对象的对象。即使 obj1 和 obj3 具有相同的内容,它们也是不同的对象。根本找不到具有相同内容的新对象。

$ node main.js
Last obj1: 3
Last obj3: 2
Same content but different object: -1

来源

数组 lastIndexOf - 语言参考

在本文中,我们演示了如何使用 lastIndexOf() 方法在 JavaScript 的数组和字符串中查找元素。

作者

我的名字是 Jan Bodnar,我是一位充满激情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。迄今为止,我撰写了 1,400 多篇文章和 8 本电子书。我拥有十多年教授编程的经验。

列出 所有 JS 数组函数。