WebGL Tutorial
and more

lastIndexOf

撰写时间:2024-03-15

最新修订:2024-03-15

lastIndexOf

返回元素在数组中最后一次出现的索引值。

原型

numberlastIndexOf
  • *element
  • numberfromIndex = array.length - 1

参数

element

要查找的元素。

fromIndex = array.length - 1

从哪个索引位置开始查找。可使用负数表示倒数第n个索引位置

若未指定,默认为array.length - 1,即倒数第1个索引位置

返回值

如果要查找的元素在数组中有1或多次出现,则返回最后一次出现的索引值。否则,返回-1

说明

查找最后一次出现的索引值,共有2种算法。

第一种算法是从左到右查找。如果发现有第一次出现,则再查找第二次、第三次......直至搜索到末尾。然后再看哪一次是最后一次出现。这种算法,前面出现的多次均不算,白查了,因此这种算法效率低下。

第二种算法是从右到左查找。一旦出现,则立即返回所在位置的索引值。因此,这种算法简单、高效。lastIndexOf方法采用的是这种从右到左来查找的反向搜索方法。

这也是为何当参数fromIndex省略时,其默认值为array.length - 1的原因:从最后一个索引位置开始,从右到左查找。

例子

基本用法

let arr = ['b', 'c', 'g', 'b', 't']; console.log(arr.lastIndexOf('b')); // 3

字符b在数组中现出2次,从左到右,分别位于索引值为03的位置上面。从右边开始查找,则在3的位置上查找到该元素,因此,返回3

指定开始搜索的位置

lastIndexOf方法在指定查找位置时,情况有点复杂,但只要牢牢记住:从右往左查找,就很容易理解。下面分段讨论。

指定位置在数组范围内

先声明一个名为arr的数组。

let arr = ['c', 'b', 'g', 'b', 't']; // [0 - 4]

其数组索引值的有效值域为[0, 4]。下面多个代码均以此作为搜索源。

console.log(arr.lastIndexOf('b', 4)); // 3

从第4个位置开始,也即最后一个位置开始,从右到左查找,在3的位置找到b

console.log(arr.lastIndexOf('b', 2)); // 1

从第2个位置开始,从右到左查找,在1的位置找到b

console.log(arr.lastIndexOf('b', 0)); // -1

从第0个位置开始,从右到左查找,找不到b,返回-1

let arr = ['c', 'b', 'g', 'b', 't']; // [0 - 4] console.log(arr.lastIndexOf('b', -2)); // 3

当参数fromIndex为负数时,表示倒数第n个索引位置。上面从倒数第2个位置开始,从右到左查找,在3的位置找到b

指定位置超出数组索引值的右边界

let arr = ['c', 'b', 'g', 'b', 't']; // [0 - 4] console.log(arr.lastIndexOf('b', 50)); // 3

fromIndex指定的位置50超出了数组索引值的右边界,表示从50的位置从右到左查找,在3的位置找到b

指定位置超出数组索引值的左边界

let arr = ['c', 'b', 'g', 'b', 't']; // [0 - 4] console.log(arr.lastIndexOf('b', -50)); // 3

fromIndex指定的位置-50超出了数组索引值的左边界,表示从-50的位置从右到左查找,则永远都不会找到特定的元素。因此返回在-1

参见

  1. findIndex
  2. includes
  3. indexOf

参考资源

  1. ECMA 262: Array Objects