Tạo đối tượng có thể lặp trong JavaScript
Hãy tạo một đối tượng có thể lặp thực sự,
mà có thể được lặp qua
bằng vòng lặp for-of. Để làm điều này,
đối tượng cần thêm một hàm tương ứng
vào Symbol.iterator.
Hãy triển khai. Giả sử chúng ta có đối tượng sau:
let obj = {
a: 1,
b: 2,
c: 3,
};
Thêm hàm vào Symbol.iterator:
obj[Symbol.iterator] = function() {
}
Biến hàm này thành một generator:
obj[Symbol.iterator] = function *() {
}
Bên trong hàm của chúng ta, this sẽ tham chiếu
đến chính đối tượng:
obj[Symbol.iterator] = function *() {
console.log(this); // chính đối tượng
}
Hãy chạy việc lặp qua đối tượng trong iterator:
obj[Symbol.iterator] = function *() {
for (let key in this) {
yield obj[key];
}
}
Xong, đối tượng có thể được lặp bằng vòng lặp
for-of:
for (let elem of obj) {
console.log(elem); // 1, 2, 3
}
Hãy tạo một đối tượng có thể lặp qua
bằng vòng lặp for-of. Hãy để phần tử
của vòng lặp là một đối tượng, trong khóa key
của nó sẽ là khóa của đối tượng được lặp,
và trong khóa val - giá trị.
Ví dụ:
let obj = {a: 1, b: 2, c: 3};
for (let elem of obj) {
console.log(elem);
}
Sẽ in ra:
{key: 'a', val: 1}
{key: 'b', val: 2}
{key: 'c', val: 3}