Array 迭代方式
let array = ["Ay","ay","ay","ay","canta y no llores"]; let iterator = array[Symbol.iterator](); it.next(); //"Ay" it.next(); //"ay"
Map 迭代方式
let map = new Map();
map.set("a",1);
map.set("b",2);
map.set("c",3);
let iterator = map[Symbol.iterator](); //第一種方式
let entries = map.entries(); //第二種方式
iterator.next(); //["a",1]
entries.next(); //["a",1]
可以被 FOR OF 迭代的 Iterator
let iterator = {
[Symbol.iterator](){
return this;
},
next(){
return { value: "XX", done: true };
}
}
Generator 產生器
產生器的寫法,會給 for of 之類可以呼叫 "next()" 的迭代方法操作,所以每個 yield 停頓點會在 next() 執行後移動到下一個 yield 之前。常見寫法:
function *test(){ //加一個星號,這個 function 會自動符合 iterator 介面。
yield 1;
yield 2;
yield 3;
}
for(let i of test()){
console.log(i); //1..2..3
}
把陣列當成 generator 在傳:
function *test(){
yield *[1,2,3,4,5,6,7,8]; //陣列自動變成可以被 iterating 的 generator;
yield "HAHA"; //搗亂
}
for(let i of test()){
console.log(i); //1..2..3..4..5..6..7..8..HAHA
}
Reference:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators
沒有留言:
張貼留言