Skip to content

Instantly share code, notes, and snippets.

@indongyoo
Created January 25, 2019 14:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save indongyoo/3af3f7aa69cba39ebffd006853da39df to your computer and use it in GitHub Desktop.
Save indongyoo/3af3f7aa69cba39ebffd006853da39df to your computer and use it in GitHub Desktop.
function *entriesLazy(obj) {
for (const k in obj) yield [k, obj[k]];
}
[...entriesLazy({ a: 1, b: 2 })];
// [['a', 1], ['b', 2]]
function *mapEntriesLazy(f, iter) {
for (const [k, a] of iter) yield [k, f(a)];
}
[...mapEntriesLazy(a => a + 1, [['a', 1], ['b', 2]])];
// [['a', 2], ['b', 3]]
const m = new Map([['a', 1], ['b', 2]]);
new Map([...mapEntriesLazy(a => a + 1, m.entries())]);
// Map(2) {"a" => 2, "b" => 3}
const object = iter =>
reduce((obj, [k, v]) => (obj[k] = v, obj), {}, iter);
object([['a', 1], ['b', 2]]);
// { a: 1, b: 2 }
const mapObject = (f, obj) =>
object(mapEntriesLazy(f, entriesLazy(obj)));
mapObject(a => a + 1, { a: 1, b: 2});
// { a: 2, b: 3 }
mapObject(a => a + 1, new Map([['a', 1], ['b', 2]]).entries());
// { a: 2, b: 3}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment