Skip to content

Instantly share code, notes, and snippets.

@anatooly
Last active August 19, 2019 08:40
Show Gist options
  • Save anatooly/b8f73c698e35c705afb001cc9980b110 to your computer and use it in GitHub Desktop.
Save anatooly/b8f73c698e35c705afb001cc9980b110 to your computer and use it in GitHub Desktop.
es6 iterator cycle
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