Array.prototype.findLastIndex()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since August 2022.
Phương thức findLastIndex() của các instance Array lặp qua mảng theo thứ tự ngược lại và trả về chỉ số của phần tử đầu tiên thỏa mãn hàm kiểm tra được cung cấp.
Nếu không có phần tử nào thỏa mãn hàm kiểm tra, -1 được trả về.
Xem thêm phương thức findLast(), phương thức này trả về giá trị của phần tử cuối cùng thỏa mãn hàm kiểm tra (thay vì chỉ số của nó).
Try it
const array = [5, 12, 50, 130, 44];
const isLargeNumber = (element) => element > 45;
console.log(array.findLastIndex(isLargeNumber));
// Expected output: 3
// Index of element with value: 130
Syntax
findLastIndex(callbackFn)
findLastIndex(callbackFn, thisArg)
Parameters
callbackFn-
Hàm để thực thi cho mỗi phần tử trong mảng. Nó trả về một giá trị truthy để chỉ rằng đã tìm thấy phần tử phù hợp, và một giá trị falsy trong trường hợp ngược lại. Hàm được gọi với các đối số sau:
thisArgOptional-
Giá trị để dùng làm
thiskhi thực thicallbackFn. Xem iterative methods.
Return value
Chỉ số của phần tử cuối cùng (chỉ số cao nhất) trong mảng vượt qua bài kiểm tra.
Ngược lại -1 nếu không tìm thấy phần tử phù hợp.
Description
Phương thức findLastIndex() là một iterative method. Nó gọi hàm callbackFn được cung cấp một lần cho mỗi phần tử trong mảng theo thứ tự chỉ số giảm dần, cho đến khi callbackFn trả về một giá trị truthy. Khi đó findLastIndex() trả về chỉ số của phần tử đó và dừng lặp qua mảng. Nếu callbackFn không bao giờ trả về giá trị truthy, findLastIndex() trả về -1. Đọc phần iterative methods để biết thêm thông tin về cách các phương thức này hoạt động nói chung.
callbackFn được gọi cho mỗi chỉ số của mảng, không chỉ những chỉ số đã được gán giá trị. Các slot rỗng trong mảng thưa (sparse arrays) được xử lý giống như undefined.
Phương thức findLastIndex() là generic. Nó chỉ yêu cầu giá trị this có thuộc tính length và các thuộc tính có khóa là số nguyên.
Examples
>Tìm chỉ số của số nguyên tố cuối cùng trong mảng
Ví dụ sau trả về chỉ số của phần tử cuối cùng trong mảng là số nguyên tố, hoặc -1 nếu không có số nguyên tố nào.
function isPrime(n) {
if (n < 2) {
return false;
}
if (n % 2 === 0) {
return n === 2;
}
for (let factor = 3; factor * factor <= n; factor += 2) {
if (n % 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
Note:
Cài đặt isPrime() này chỉ dùng cho mục đích minh họa. Với ứng dụng thực tế, bạn nên dùng một thuật toán được ghi nhớ (memoized) nhiều như Sieve of Eratosthenes để tránh tính toán lặp lại.
Dùng đối số thứ ba của callbackFn
Đối số array hữu ích khi bạn muốn truy cập một phần tử khác trong mảng, đặc biệt khi bạn không có biến hiện có nào tham chiếu đến mảng. Ví dụ sau trước tiên dùng filter() để trích xuất các giá trị dương và sau đó dùng findLastIndex() để tìm phần tử cuối cùng nhỏ hơn các láng giềng của nó.
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
Dùng findLastIndex() trên mảng thưa
Bạn có thể tìm kiếm undefined trong mảng thưa và lấy chỉ số của một slot rỗng.
console.log([1, , 3].findLastIndex((x) => x === undefined)); // 1
Gọi findLastIndex() trên các đối tượng không phải mảng
Phương thức findLastIndex() đọc thuộc tính length của this và sau đó truy cập từng thuộc tính có khóa là số nguyên không âm nhỏ hơn 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
Specifications
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-array.prototype.findlastindex> |
Browser compatibility
See also
- Polyfill of
Array.prototype.findLastIndexincore-js - es-shims polyfill of
Array.prototype.findLastIndex - Indexed collections guide
ArrayArray.prototype.find()Array.prototype.findIndex()Array.prototype.findLast()Array.prototype.indexOf()Array.prototype.lastIndexOf()TypedArray.prototype.findLastIndex()