Skip to content

Instantly share code, notes, and snippets.

@DmitrySoshnikov
Created March 11, 2011 08:38
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save DmitrySoshnikov/865630 to your computer and use it in GitHub Desktop.
Save DmitrySoshnikov/865630 to your computer and use it in GitHub Desktop.
harmony-iterators.js
//
// by Dmitry Soshnikov <dmitry.soshnikov@gmail.com>
// MIT Style License
// see also: http://wiki.ecmascript.org/doku.php?id=strawman:iterators
//
// ---------------------------------------
// 1. Iteration via for-in loop
// ---------------------------------------
var foo = {
x: 10,
y: 20
};
// iterate over keys
for (let k in keys(foo)) {
console.log(k); // x, y
}
// over values
for (let v in values(foo)) {
console.log(v); // 10, 20
}
// and over properties (keys and values)
for (let [k, v] in properties(foo)) {
console.log(k, v); // x,10, y,20
}
// the previous is the standard
// iterator of the SpiderMonkey
for (let [k, v] in Iterator(foo)) {
console.log(k, v); // x,10, y,20
}
// ---------------------------------------
// 2. Manual iteration via generator
// ---------------------------------------
let bar = {
x: 10,
y: 20
};
var barKeysGenerator = keys(bar);
console.log(barKeysGenerator.next()); // x
console.log(barKeysGenerator.next()); // y
console.log(barKeysGenerator.next()); // StopIteration
// ---------------------------------------
// Implementation
// ---------------------------------------
// generic iterator
function generate(o, fn) {
for (var k in o) {
yield fn(k, o[k]);
}
}
// by keys
function keys(o) {
return generate(o, function (k, v) {
return k;
});
}
// by values
function values(o) {
return generate(o, function (k, v) {
return v;
});
}
// by properties
function properties(o) {
return generate(o, function (k, v) {
return [k, v];
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment