const array1 = [5, 12, 50, 130, 44];
const found = array1.findLast((element) => element > 45);
console.log(found);
/ Expected output: 130
const array1 = [5, 12, 50, 130, 44];
const found = array1.findLast((element) => element > 45);
console.log(found);
/ Expected output: 130
findLast(callbackFn)
findLast(callbackFn, thisArg)
callbackFn
数组中测试元素的函数。回调应该返回一个假值。函数在被调用时会传递以下参数:
thisArg
可选执行 callbackFn
时,用作 this
的值。详见迭代方法。
数组中满足提供的测试函数索引最高的元素;如果没有元素匹配,返回 undefined
。
callbackFn
会被数组中的每个元素调用,而不仅仅是那些被赋值的元素。对于稀疏数组来说,空槽行为和 undefined
相同。
findLast()
方法不会改变调用它的数组,但是提供的 callbackFn
可以。但是请注意,数组的长度是在第一次调用 callbackFn
之前保存的。因此:
callbackFn
不会访问在调用 findLast()
开始后才添加到数组中的任何元素。callbackFn
重新访问。callbackFn
更改了数组中现有的、尚未访问的元素,则其传递给 callbackFn
的值将是 findLast()
访问该元素索引时的值。已删除的元素会被当做 undefined
来访问。警告: 上一段描述的并发修改的情况经常导致难以理解的代码,通常应该避免(特殊情况除外)。
findLast()
方法是通用的。它只期望 this
值具有 length
属性和整数键的属性。
此示例展示了如何根据数组元素的属性创建测试。
const inventory = [
{ name: "apples", quantity: 2 },
{ name: "bananas", quantity: 0 },
{ name: "fish", quantity: 1 },
{ name: "cherries", quantity: 5 },
];
/ 库存低时返回 true
function isNotEnough(item) {
return item.quantity < 2;
}
console.log(inventory.findLast(isNotEnough));
/ { name: "fish", quantity: 1 }
前面的示例可以使用箭头函数和对象解构重写如下:
const inventory = [
{ name: "apples", quantity: 2 },
{ name: "bananas", quantity: 0 },
{ name: "fish", quantity: 1 },
{ name: "cherries", quantity: 5 },
];
const result = inventory.findLast(({ quantity }) => quantity < 2);
console.log(result);
/ { name: "fish", quantity: 1 }
以下示例查找数组中的最后一个素数元素(如果没有素数,则返回 undefined
):
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].findLast(isPrime)); / undefined,没有找到
console.log([4, 5, 7, 8, 9, 11, 12].findLast(isPrime)); / 11
稀疏数组中的空槽被访问,并被视为 undefined
。
/ 声明一个在索引 2、3 和 4 处没有元素的数组
const array = [0, 1, , , , 5, 6];
/ 显示所有的索引(不只包括那些被赋值的)
array.findLast((value, index) => {
console.log(`访问索引 ${index},值为 ${value}`);
});
/ 访问索引 6,值为 6
/ 访问索引 5,值为 5
/ 访问索引 4,值为 undefined
/ 访问索引 3,值为 undefined
/ 访问索引 2,值为 undefined
/ 访问索引 1,值为 1
/ 访问索引 0,值为 0
/ 显示所有的索引(包括已被删除的)
array.findLast((value, index) => {
/ 在第一次迭代时删除值为 5 的元素
if (index === 6) {
console.log(`删除值为 array[5],其值为 ${array[5]}`);
delete array[5];
}
/ 元素 5 在被删除后,仍会被访问
console.log(`访问索引 ${index},值为 ${value}`);
});
/ 删除值为 array[5],其值为 5
/ 访问索引 6,值为 6
/ 访问索引 5,值为 undefined
/ 访问索引 4,值为 undefined
/ 访问索引 3,值为 undefined
/ 访问索引 2,值为 undefined
/ 访问索引 1,值为 1
/ 访问索引 0,值为 0
findLast()
方法读取 this
的 length
属性,然后访问每个整数索引。
const arrayLike = {
length: 3,
0: 2,
1: 7.3,
2: 4,
};
console.log(
Array.prototype.findLast.call(arrayLike, (x) => Number.isInteger(x)),
); / 4
Specification |
---|
ECMAScript® 2026 Language Specification # sec-array.prototype.findlast |