Array.prototype.findLastIndex()
Baseline 2022
Newly available
Since August 2022, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.
findLastIndex()
方法反向迭代数组,并返回满足所提供的测试函数的第一个元素的索引。若没有找到对应元素,则返回 -1。
另请参见 findLast()
方法,该方法返回最后一个满足测试函数的元素的值(而不是它的索引)。
尝试一下
语法
findLastIndex(callbackFn)
findLastIndex(callbackFn, thisArg)
参数
返回值
数组中通过测试的最后一个(索引最大)元素的索引。如果没有找到任何匹配的元素,则返回 -1。
描述
findLastIndex()
方法是一个迭代方法。它为数组中的每个元素按索引降序调用一次提供的 callbackFn
函数,直到 callbackFn
返回一个真值。然后 findLastIndex()
返回元素的索引并且停止遍历数组。如果 callbackFn
没有返回一个真值,则 findLastIndex()
返回 -1
。
callbackFn
会为数组中的每个元素调用,而不仅仅是那些被赋值的元素,这意味着对于稀疏数组来说,空槽的行为和 undefined
相同。
findLastIndex()
方法不会改变调用它的数组,但是提供的 callbackFn
可以。但是请注意,数组的长度是在第一次调用 callbackFn
之前保存的。因此:
callbackFn
不会访问在调用findLastIndex()
开始后才添加到数组中的任何元素。- 对已访问索引的更改不会导致对它们再次调用
callbackFn
函数。 - 如果
callbackFn
更改了数组中现有的、尚未访问的元素,它传递给callbackFn
的值将是该元素被访问时的值。已删除元素被当作undefined
来访问。
警告: 上一段描述的并发修改的情况经常导致难以理解的代码,通常应该避免(特殊情况除外)。
findLastIndex()
方法是通用的。它只期望 this
值具有 length
属性和整型键属性。
示例
查找数组中最后一个素数的索引
下面的示例返回数组中作为素数的最后一个元素的索引,如果没有素数,则返回 -1
。
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,没有找到
console.log([4, 5, 7, 8, 9, 11, 12].findLastIndex(isPrime)); // 5
在稀疏数组上使用 findLastIndex()
你可以在稀疏数组中搜索 undefined
并获得空槽的索引。
console.log([1, , 3].findLastIndex((x) => x === undefined)); // 1
在非数组对象上调用 findLastIndex()
findLastIndex()
方法读取 this
的 length
属性,然后访问每个整数索引。
const arrayLike = {
length: 3,
0: 2,
1: 7.3,
2: 4,
};
console.log(
Array.prototype.findLastIndex.call(arrayLike, (x) => Number.isInteger(x)),
); // 2
规范
Specification |
---|
ECMAScript Language Specification # sec-array.prototype.findlastindex |
浏览器兼容性
BCD tables only load in the browser