Lặp lại JavaScript
Iterables là các đối tượng có thể lặp lại (như Mảng).
Iterables có thể được truy cập bằng mã đơn giản và hiệu quả.
Các vòng lặp có thể được lặp lại bằng vòng lặp for..of
Vòng lặp For Of
Câu lệnh for..of
của JavaScript lặp qua các phần tử của một đối tượng có thể lặp lại.
Cú pháp
for (variable of iterable) {
// code block to be executed
}
Lặp lại
Việc lặp lại là điều dễ hiểu.
Nó đơn giản có nghĩa là lặp qua một chuỗi các phần tử.
Dưới đây là một số ví dụ dễ dàng:
- Lặp lại một chuỗi
- Lặp lại một mảng
Lặp lại một chuỗi
Bạn có thể sử dụng vòng lặp for..of
để lặp lại các phần tử của chuỗi:
Ví dụ
const name = "W3Schools";
for (const x of name) {
// code block to be executed
}
Hãy tự mình thử »Lặp lại một mảng
Bạn có thể sử dụng vòng lặp for..of
để lặp qua các phần tử của Mảng:
ví dụ 1
const letters = ["a","b","c"];
for (const x of letters) {
// code block to be executed
}
Hãy tự mình thử »Ví dụ 2
const numbers = [2,4,6,8];
for (const x of numbers) {
// code block to be executed
}
Hãy tự mình thử »Lặp lại một tập hợp
Bạn có thể sử dụng vòng lặp for..of
để lặp lại các phần tử của Tập hợp:
Ví dụ
const letters = new Set(["a","b","c"]);
for (const x of letters) {
// code block to be executed
}
Hãy tự mình thử »Ghi chú
Bộ và Bản đồ sẽ được đề cập trong các chương tiếp theo.
Lặp lại trên bản đồ
Bạn có thể sử dụng vòng lặp for..of
để lặp lại các thành phần của Bản đồ:
Ví dụ
const fruits = new Map([
["apples", 500],
["bananas", 300],
["oranges", 200]
]);
for (const x of fruits) {
// code block to be executed
}
Hãy tự mình thử » Trình lặp JavaScript
Giao thức iterator xác định cách tạo ra một chuỗi các giá trị từ một đối tượng.
Một đối tượng trở thành một iterator khi nó triển khai phương thức next()
.
Phương thức next()
phải trả về một đối tượng có hai thuộc tính:
- giá trị (giá trị tiếp theo)
- thực hiện (đúng hoặc sai)
giá trị | Giá trị được trả về bởi iterator (Có thể bỏ qua nếu thực hiện đúng) |
---|---|
xong | đúng nếu trình vòng lặp đã hoàn thành sai nếu trình lặp đã tạo ra một giá trị mới |
Ghi chú
Về mặt kỹ thuật, các iterable phải triển khai phương thức Symbol.iterator
.
String, Array, TypedArray, Map và Set đều là các iterable, bởi vì các đối tượng nguyên mẫu của chúng có phương thức Symbol.iterator.
Home Made Iterable
Việc lặp lại này trả về không bao giờ kết thúc: 10,20,30,40,.... Mỗi lần next()
được gọi:
Ví dụ
// Home Made Iterable
function myNumbers() {
let n = 0;
return {
next: function() {
n += 10;
return {value:n, done:false};
}
};
}
// Create Iterable
const n = myNumbers();
n.next(); // Returns 10
n.next(); // Returns 20
n.next(); // Returns 30
Hãy tự mình thử »Vấn đề với một ngôi nhà có thể lặp lại:
Nó không hỗ trợ câu lệnh for..of
của JavaScript.
Một JavaScript lặp lại là một đối tượng có Symbol.iterator .
Symbol.iterator
là một hàm trả về hàm next()
.
Một iterable có thể được lặp lại bằng mã: for (const x of iterable) { }
Ví dụ
// Create an Object
myNumbers = {};
// Make it Iterable
myNumbers[Symbol.iterator] = function() {
let n = 0;
done = false;
return {
next() {
n += 10;
if (n == 100) {done = true}
return {value:n, done:done};
}
};
}
Bây giờ bạn có thể sử dụng for..of
for (const num of myNumbers) {
// Any Code Here
}
Hãy tự mình thử » Phương thức Symbol.iterator được gọi tự động bởi for..of
.
Nhưng chúng ta cũng có thể làm điều đó "thủ công":
Ví dụ
let iterator = myNumbers[Symbol.iterator]();
while (true) {
const result = iterator.next();
if (result.done) break;
// Any Code Here
}
Hãy tự mình thử »