1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] const from = (arr) => arr[Symbol.iterator]()
const filter = (f) => function* (iter) { let v = iter.next() while (!v.done) { if (f(v.value)) yield v.value v = iter.next() } }
const multipy = (n) => function* (iter) { let v = iter.next() while (!v.done) { yield v.value * n v = iter.next() } }
const take = (n) => function* (iter) { let i = 0 let v = iter.next() while (!v.done && i < n) { yield v.value i++ v = iter.next() } }
const pipe = (...arr) => arr.reduce((acc, func) => func(acc))
console.log([ ...pipe( from(arr), filter((v) => v % 2 === 0), multipy(3), take(30), filter((v) => v > 15) ), ])
|