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
沒有留言:
張貼留言