Một số khái niệm
Iterator và iterator result
Iterator là 1 object có thể lấy ra lần lượt các iterator result, implement method next[]
và bằng cách gọi method next[]
có thể trả về iterator result. Giá trị trả về này là 1 object có chứa thuộc tính done
cho biết có thể đã kết thúc chuỗi iterated sequence hay chưa và thuộc tính value
để biểu thị giá trị.
Dưới đây là 1 ví dụ minh họa về iterator và iterator result
var it = {}; // iterator
it.next = function[]{
var r = { value: 5, done: false }; // iterator result
return r;
};
Iterable object
Iterable
object là 1 object có chứa iterator. Cụ thể khi gọi [Symbol.iterator][]
sẽ trả về iterator của object đó
var it = {}; // iterator
it.next = function[]{
var r = { value: 5, done: false }; // iterator result
return r;
};
var obj = {}; // iterable object
obj[Symbol.iterator] = function[]{
return iterator;
};
Sử dụng iterator
Tạo 1 iterable object
Xét 1 ví dụ đơn giản tạo 1 iteratable object có thể lấy ra các số nguyên từ 1 đến 5.
Dựa theo các khái niệm đã nói ở trên, ta cần tạo 1 object obj
mà khi gọi obj[Symbol.iterator] sẽ trả về iterator. Iterator đố cần định nghĩa method next
để có thể lấy được phấn tử tiếp theo.
var obj = {}; // iterable object
obj[Symbol.iterator] = function[]{
var it = {}; // iterator
var count = 1;
it.next = function[]{
var r = [count [0, "A", false, "x", "y", "z"]
Truyền iterable object như tham số
var nums = [104, 101, 108, 108, 111];
console.log[ Math.max[...nums] ];
console.log[ String.fromCharCode[...nums] ];
=>
111
hello
Phép gán
Javascript cho phép cú pháp [a ,b ,c ] = iterable
để
gán lần lượt giá trị của iterable object vào các biến theo thứ tự
var [a, b, c] = "hai";
console.log[c+b+a];
=> iah