フィボナッチ数列イテレータなど、無限長であるイテレータに対してmapしたイテレータが欲しくなるときありますよね?ありますよね?
目標物
こんな感じのものが欲しいですな、ということです
const fib = function*() { let a = 0, b = 1; while (true) { yield a; [a, b] = [b, a + b]; } } const fib2 = map(fib, x => x * 2); const iter = fib2(); fib2.next().value; // 0 fib2.next().value; // 2 fib2.next().value; // 2 fib2.next().value; // 4 fib2.next().value; // 6
となるようなmapを作ります。
やり方
簡単明快です。
const map = (gen, f) => { return function*() { const iter = gen(); for (const val of iter) { yield f(val); } }; }
え?next()に何か渡したい?return()したい? そんなこと知りません。 そのうち考えますね。