JavaScript lặp lại
Các đối tượng có thể lặp lại là các đối tượng có thể được lặp lại với for..of
.
Về mặt kỹ thuật, các tệp lặp phải triển khai Symbol.iterator
phương thức.
Lặp lại trên một chuỗi
Bạn có thể sử dụng một for..of
vòng lặp để lặp lại các phần tử của một chuỗi:
Thí dụ
for (const x of "W3Schools") {
// code block to be executed
}
Lặp lại trên một mảng
Bạn có thể sử dụng một for..of
vòng lặp để lặp lại các phần tử của Mảng:
Thí dụ
for (const x of [1,2,3,4,5] {
// code block to be executed
}
Trình lặp lại JavaScript
Giao thức trình lặp xác định cách tạo chuỗi giá trị từ một đối tượng.
Một đối tượng trở thành một trình lặp khi nó thực thi một next()
phương thức.
Phương next()
thức phải trả về một đối tượng có hai thuộc tính:
- giá trị (giá trị tiếp theo)
- xong (đúng hay sai)
giá trị | Giá trị được trả về bởi trình lặp (Có thể được bỏ qua nếu giá trị hoàn thành là đúng) |
---|---|
làm xong |
true nếu trình lặp đã hoàn thành false nếu trình lặp đã tạo ra một giá trị mới |
Nhà làm có thể lặp lại
Trả về có thể lặp lại này không bao giờ kết thúc: 10,20,30,40, .... Mọi thời điểm
next()
được gọi là:
Thí 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
Vấn đề với nhà làm có thể lặp lại:
Nó không hỗ trợ for..of
câu lệnh JavaScript.
JavaScript có thể lặp lại là một đối tượng có Symbol.iterator .
Hàm Symbol.iterator
là một hàm trả về một next()
hàm.
Có thể lặp lại có thể lặp lại bằng mã: for (const x of iterable) { }
Thí 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
}
Phương thức Symbol.iterator được gọi tự động bởi for..of
.
Nhưng chúng tôi cũng có thể làm điều đó "thủ công":
Thí dụ
let iterator = myNumbers[Symbol.iterator]();
while (true) {
const result = iterator.next();
if (result.done) break;
// Any Code Here
}