Array.prototype.findIndex()

基线 广泛可用

此功能已得到充分验证,可以在许多设备和浏览器版本中使用。它自 2016 年 9 月.

报告反馈

findIndex()Array 实例的方法,它返回数组中第一个满足提供的测试函数的元素的索引。如果没有任何元素满足测试函数,则返回 -1。

试一试

语法

另请参见 find() 方法,它返回第一个满足测试函数的元素(而不是它的索引)。
findIndex(callbackFn)
findIndex(callbackFn, thisArg)

js

参数

callbackFn

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

元素

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

索引

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

数组

findIndex() 被调用的数组。

thisArg 可选

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

返回值

描述

数组中第一个通过测试的元素的索引。否则,为 -1

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

callbackFn 被调用以处理数组的每个索引,而不仅仅是那些具有指定值的索引。在 稀疏数组 中的空槽的行为与 undefined 相同。

示例

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

查找数组中素数的索引

另请参见 find() 方法,它返回第一个满足测试函数的元素(而不是它的索引)。
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, 9, 12].findIndex(isPrime)); // -1, not found
console.log([4, 6, 7, 9, 12].findIndex(isPrime)); // 2 (array[2] is 7)

以下示例返回数组中第一个元素的索引,该元素是素数,或者如果不存在素数,则返回 -1

使用 callbackFn 的第三个参数

另请参见 find() 方法,它返回第一个满足测试函数的元素(而不是它的索引)。
const numbers = [3, -1, 1, 4, 1, 5, 9, 2, 6];
const firstTrough = numbers
  .filter((num) => num > 0)
  .findIndex((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(firstTrough); // 1

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

在稀疏数组上使用 findIndex()

另请参见 find() 方法,它返回第一个满足测试函数的元素(而不是它的索引)。
console.log([1, , 3].findIndex((x) => x === undefined)); // 1

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

在非数组对象上调用 findIndex()

另请参见 find() 方法,它返回第一个满足测试函数的元素(而不是它的索引)。
const arrayLike = {
  length: 3,
  "-1": 0.1, // ignored by findIndex() since -1 < 0
  0: 2,
  1: 7.3,
  2: 4,
};
console.log(
  Array.prototype.findIndex.call(arrayLike, (x) => !Number.isInteger(x)),
); // 1

规范

findIndex() 方法读取 thislength 属性,然后访问每个键为非负整数且小于 length 的属性。
规范
# ECMAScript 语言规范

浏览器兼容性

sec-array.prototype.findindex

参见