function* fibGenerator(qualifierFunc) { let a = 0; let b = 1; for (;;) { if (qualifierFunc && !qualifierFunc(a)) { return; } console.log('gen fib', a); yield a; const n = a; a += b; b = n; } } Array.from(fibGenerator(n => n <= 13), v => console.log('hey', v)); console.log('----'); Array.from(fibGenerator(n => n <= 13)).map(v => console.log('hey', v));
gen fib 0 hey 0 gen fib 1 hey 1 gen fib 1 hey 1 gen fib 2 hey 2 gen fib 3 hey 3 gen fib 5 hey 5 gen fib 8 hey 8 gen fib 13 hey 13 ---- gen fib 0 gen fib 1 gen fib 1 gen fib 2 gen fib 3 gen fib 5 gen fib 8 gen fib 13 hey 0 hey 1 hey 1 hey 2 hey 3 hey 5 hey 8 hey 13
The first Array.from is better as it does not allocate memory. Don't defeat the purpose of iterator's lazy-evaluating capability.
No comments:
Post a Comment