JavaScript lastIndexOf 方法
最后修改于 2025 年 4 月 4 日
在本文中,我们将展示如何使用 JavaScript 中的 lastIndexOf
方法在数组和字符串中查找元素。
lastIndexOf 方法
lastIndexOf
方法返回给定元素在数组或字符串中最后一次出现时的索引。对于数组,它从末尾向后搜索。对于字符串,它从指定的索引向后搜索。
如果未找到该元素,该方法将返回 -1。对于数组,它使用严格相等 (===) 进行比较。对于字符串,它执行区分大小写的搜索。该方法在 JavaScript 中的 Array 和 String 原型上都可用。
lastIndexOf
方法可以接受一个可选的第二个参数,以指定搜索的起始索引。负值从数组或字符串的末尾向后计数。这使其对于查找元素的最后一次出现很有用。
基本数组 lastIndexOf 示例
以下示例演示了 lastIndexOf
与数组的基本用法。
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
方法在字符串中的工作方式类似。
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
方法接受一个可选的第二个参数来指定从哪里开始搜索。
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
来查找元素的所有出现。
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
方法使用严格相等性,这会影响它处理对象的方式。
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() 方法在 JavaScript 的数组和字符串中查找元素。
作者
列出 所有 JS 数组函数。