Array.prototype.findLastIndex()

基线 2022

新可用

2022 年 8 月起,此功能在最新的设备和浏览器版本中可用。此功能可能无法在旧设备或浏览器中使用。

findLastIndex() 方法 Array 实例按相反顺序迭代数组,并返回第一个满足提供的测试函数的元素的索引。如果没有任何元素满足测试函数,则返回 -1。

另请参见 findLast() 方法,该方法返回满足测试函数的最后一个元素的值(而不是其索引)。

试一试

语法

js
findLastIndex(callbackFn)
findLastIndex(callbackFn, thisArg)

参数

callbackFn

要对数组中的每个元素执行的函数。它应该返回一个 真值 以指示已找到匹配的元素,否则返回一个 假值 。该函数使用以下参数调用

element

数组中正在处理的当前元素。

index

数组中正在处理的当前元素的索引。

array

调用 findLastIndex() 的数组。

thisArg 可选

在执行 callbackFn 时用作 this 的值。参见 迭代方法

返回值

数组中通过测试的最后一个(最高索引)元素的索引。否则,如果未找到匹配的元素,则为 -1

描述

findLastIndex() 方法是一个 迭代方法 。它对数组中的每个元素(以降序索引顺序)调用一次提供的 callbackFn 函数,直到 callbackFn 返回一个 真值findLastIndex() 然后返回该元素的索引并停止遍历数组。如果 callbackFn 从未返回真值,则 findLastIndex() 返回 -1 。阅读 迭代方法 部分以了解有关这些方法如何工作的一般信息。

callbackFn 对数组的每个索引调用,而不仅仅是那些已分配值的索引。 稀疏数组 中的空插槽的行为与 undefined 相同。

findLastIndex() 方法是 泛型 。它只期望 this 值具有 length 属性和整数键属性。

示例

查找数组中最后一个素数的索引

以下示例返回数组中最后一个素数元素的索引,如果不存在素数,则返回 -1

js
function isPrime(element) {
  if (element % 2 === 0 || element < 2) {
    return false;
  }
  for (let factor = 3; factor <= Math.sqrt(element); factor += 2) {
    if (element % factor === 0) {
      return false;
    }
  }
  return true;
}

console.log([4, 6, 8, 12].findLastIndex(isPrime)); // -1, not found
console.log([4, 5, 7, 8, 9, 11, 12].findLastIndex(isPrime)); // 5

使用 callbackFn 的第三个参数

array 参数很有用,如果您想访问数组中的另一个元素,尤其是在您没有引用该数组的现有变量时。以下示例首先使用 filter() 提取正值,然后使用 findLastIndex() 查找最后一个小于其相邻元素的元素。

js
const numbers = [3, -1, 1, 4, 1, 5, 9, 2, 6];
const lastTrough = numbers
  .filter((num) => num > 0)
  .findLastIndex((num, idx, arr) => {
    // Without the arr argument, there's no way to easily access the
    // intermediate array without saving it to a variable.
    if (idx > 0 && num >= arr[idx - 1]) return false;
    if (idx < arr.length - 1 && num >= arr[idx + 1]) return false;
    return true;
  });
console.log(lastTrough); // 6

对稀疏数组使用 findLastIndex()

您可以在稀疏数组中搜索 undefined 并获取空插槽的索引。

js
console.log([1, , 3].findLastIndex((x) => x === undefined)); // 1

对非数组对象调用 findLastIndex()

findLastIndex() 方法读取 thislength 属性,然后访问其键为小于 length 的非负整数的每个属性。

js
const arrayLike = {
  length: 3,
  0: 2,
  1: 7.3,
  2: 4,
  3: 3, // ignored by findLastIndex() since length is 3
};
console.log(
  Array.prototype.findLastIndex.call(arrayLike, (x) => Number.isInteger(x)),
); // 2

规范

规范
ECMAScript 语言规范
# sec-array.prototype.findlastindex

浏览器兼容性

BCD 表格仅在启用了 JavaScript 的浏览器中加载。

另请参见