Last active
August 19, 2019 08:40
-
-
Save anatooly/b8f73c698e35c705afb001cc9980b110 to your computer and use it in GitHub Desktop.
es6 iterator cycle
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var arr = [1, 2, 3]; | |
var greeting = "hello world"; | |
var m = new Map(); | |
m.set("foo", 42); | |
m.set({cool: true}, "hello world"); | |
var it = arr[Symbol.iterator](); | |
it.next(); | |
it.next(); | |
it.next(); | |
it.next(); // {value: undefined; done: true;} | |
// Make object it iterable | |
var it = { | |
[Symbol.iterator]() { return this; }, | |
next() { } | |
}; | |
it[Symbol.iterator]() === it; // true | |
for (var v of it) { | |
console.log(v); | |
} | |
// es5 like iterator interface | |
for (var v, res; (res = it.next()) && !res.done; ) { // {done: true, value: 42} | |
v = res.value; | |
console.log(v); | |
} | |
// user iterator | |
var Fib = { | |
[Symbol.iterator]() { | |
var n1 = 1, n2 = 1; | |
return { | |
// iterator iterable | |
[Symbol.iterator]() { | |
return this; | |
} | |
next() { | |
var current = n2; | |
n2 = n1; | |
n1 = n1 + current; | |
return {value: current; done: false}; | |
} | |
return(v) { | |
console.log("Fibbonaci ended"); | |
return {value: v, done: true}; | |
} | |
} | |
} | |
}; | |
for (var v of Fib) { | |
console.log(v); | |
if (v > 50) break; | |
} | |
// 1 1 2 3 5 8 13 21 34 55 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment