Array.prototype.lastIndexOf()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Phương thức lastIndexOf() của các đối tượng Array trả về chỉ mục cuối cùng mà tại đó một phần tử nhất định có thể được tìm thấy trong mảng, hoặc -1 nếu không có mặt. Mảng được tìm kiếm ngược, bắt đầu từ fromIndex.
Try it
const animals = ["Dodo", "Tiger", "Penguin", "Dodo"];
console.log(animals.lastIndexOf("Dodo"));
// Expected output: 3
console.log(animals.lastIndexOf("Tiger"));
// Expected output: 1
Cú pháp
lastIndexOf(searchElement)
lastIndexOf(searchElement, fromIndex)
Tham số
searchElement-
Phần tử cần tìm trong mảng.
fromIndexOptional-
Chỉ mục (dựa trên 0) để bắt đầu tìm kiếm ngược, được chuyển đổi thành số nguyên.
- Chỉ mục âm đếm ngược từ cuối mảng — nếu
-array.length <= fromIndex < 0, sẽ dùngfromIndex + array.length. - Nếu
fromIndex < -array.length, mảng sẽ không được tìm kiếm và trả về-1. Bạn có thể hiểu về mặt khái niệm là bắt đầu ở một vị trí không tồn tại trước đầu mảng và đi ngược từ đó. Không có phần tử mảng nào trên đường đi, nênsearchElementkhông bao giờ được tìm thấy. - Nếu
fromIndex >= array.lengthhoặcfromIndexbị bỏ qua hay làundefined, sẽ dùngarray.length - 1, khiến toàn bộ mảng được tìm kiếm. Bạn có thể hiểu về mặt khái niệm là bắt đầu ở một vị trí không tồn tại vượt ra ngoài cuối mảng và đi ngược từ đó. Cuối cùng nó đến vị trí cuối thực sự của mảng, lúc đó nó bắt đầu tìm kiếm ngược qua các phần tử mảng thực sự.
- Chỉ mục âm đếm ngược từ cuối mảng — nếu
Giá trị trả về
Chỉ mục cuối cùng của searchElement trong mảng; -1 nếu không tìm thấy.
Mô tả
Phương thức lastIndexOf() so sánh searchElement với các phần tử của mảng bằng đẳng thức nghiêm ngặt (cùng thuật toán với toán tử ===). Các giá trị NaN không bao giờ được so sánh bằng nhau, nên lastIndexOf() luôn trả về -1 khi searchElement là NaN.
Phương thức lastIndexOf() bỏ qua các ô trống trong mảng thưa.
Phương thức lastIndexOf() là phương thức tổng quát. 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.
Ví dụ
>Sử dụng lastIndexOf()
Ví dụ sau sử dụng lastIndexOf() để tìm vị trí các giá trị trong mảng.
const numbers = [2, 5, 9, 2];
numbers.lastIndexOf(2); // 3
numbers.lastIndexOf(7); // -1
numbers.lastIndexOf(2, 3); // 3
numbers.lastIndexOf(2, 2); // 0
numbers.lastIndexOf(2, -2); // 0
numbers.lastIndexOf(2, -1); // 3
Bạn không thể dùng lastIndexOf() để tìm kiếm NaN.
const array = [NaN];
array.lastIndexOf(NaN); // -1
Tìm tất cả các lần xuất hiện của một phần tử
Ví dụ sau sử dụng lastIndexOf để tìm tất cả các chỉ mục của một phần tử trong mảng đã cho, dùng push() để thêm chúng vào mảng khác khi tìm thấy.
const indices = [];
const array = ["a", "b", "a", "c", "a", "d"];
const element = "a";
let idx = array.lastIndexOf(element);
while (idx !== -1) {
indices.push(idx);
idx = idx > 0 ? array.lastIndexOf(element, idx - 1) : -1;
}
console.log(indices);
// [4, 2, 0]
Lưu ý rằng chúng ta phải xử lý trường hợp idx === 0 riêng ở đây vì phần tử sẽ luôn được tìm thấy bất kể tham số fromIndex nếu nó là phần tử đầu tiên của mảng. Điều này khác với phương thức indexOf().
Sử dụng lastIndexOf() trên mảng thưa
Bạn không thể dùng lastIndexOf() để tìm kiếm các ô trống trong mảng thưa.
console.log([1, , 3].lastIndexOf(undefined)); // -1
Gọi lastIndexOf() trên đối tượng không phải mảng
Phương thức lastIndexOf() đọ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: 3,
2: 2,
3: 5, // ignored by lastIndexOf() since length is 3
};
console.log(Array.prototype.lastIndexOf.call(arrayLike, 2));
// 2
console.log(Array.prototype.lastIndexOf.call(arrayLike, 5));
// -1
Thông số kỹ thuật
| Thông số kỹ thuật |
|---|
| ECMAScript® 2027 Language Specification> # sec-array.prototype.lastindexof> |