Array.prototype.findLastIndex()
该 findLastIndex()
方法 Array
实例按相反顺序迭代数组,并返回第一个满足提供的测试函数的元素的索引。如果没有任何元素满足测试函数,则返回 -1。
另请参见 findLast()
方法,该方法返回满足测试函数的最后一个元素的值(而不是其索引)。
试一试
语法
findLastIndex(callbackFn)
findLastIndex(callbackFn, thisArg)
参数
返回值
数组中通过测试的最后一个(最高索引)元素的索引。否则,如果未找到匹配的元素,则为 -1
。
描述
该 findLastIndex()
方法是一个 迭代方法 。它对数组中的每个元素(以降序索引顺序)调用一次提供的 callbackFn
函数,直到 callbackFn
返回一个 真值 。 findLastIndex()
然后返回该元素的索引并停止遍历数组。如果 callbackFn
从未返回真值,则 findLastIndex()
返回 -1
。阅读 迭代方法 部分以了解有关这些方法如何工作的一般信息。
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, not found
console.log([4, 5, 7, 8, 9, 11, 12].findLastIndex(isPrime)); // 5
使用 callbackFn 的第三个参数
该 array
参数很有用,如果您想访问数组中的另一个元素,尤其是在您没有引用该数组的现有变量时。以下示例首先使用 filter()
提取正值,然后使用 findLastIndex()
查找最后一个小于其相邻元素的元素。
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
并获取空插槽的索引。
console.log([1, , 3].findLastIndex((x) => x === undefined)); // 1
对非数组对象调用 findLastIndex()
该 findLastIndex()
方法读取 this
的 length
属性,然后访问其键为小于 length
的非负整数的每个属性。
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 的浏览器中加载。