Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Reduce function for iterables.
- *
- * @see https://github.com/jb55/reduce-iterator
- *
- * @param xs
- * @param reducer
- * @param acc
- * @returns {*}
- */
- function reduceIterator (xs, reducer, acc) {
- let first = true;
- let prev = acc;
- for (let x of xs) {
- if (first) {
- first = false;
- if (arguments.length < 3) {
- prev = x;
- continue;
- }
- }
- prev = reducer(prev, x)
- }
- return prev;
- }
- /**
- * Pipes an iterable through a variadric functions array.
- *
- * @param fns
- * @returns {function(*=): *}
- */
- export const pipe = (...fns) => function (iterable) {
- return reduceIterator(fns, (result, fn) => fn(result), iterable);
- };
- /**
- * Takes a number of elements from an iterable.
- *
- * @param {Number} n Number of elements
- * @returns {Function} Generator
- */
- export const take = n => function* (iterable) {
- let i = 0;
- for (let item of iterable) {
- if (i < n) {
- yield item;
- }
- i++;
- }
- };
- /**
- * Takes elements from an iterable that match the given predicate.
- *
- * @param {Function} predicate
- * @returns {Function}
- */
- export const takeIf = predicate => function* (iterable) {
- for (let item of iterable) {
- if (predicate(item)) {
- yield item;
- }
- }
- };
- /**
- * Skips a number of elements in an iterable and yields the rest.
- *
- * @param {Number} n Number of elements
- * @returns {Function} Generator
- */
- export const skip = n => function* (iterable) {
- let i = 0;
- for (let item of iterable) {
- if (i >= n) {
- yield item;
- }
- i++;
- }
- };
- /**
- * Skips items of an iterable that match the given predicate.
- *
- * @param {Function} predicate
- * @returns {Function} Generator
- */
- export const skipIf = predicate => function* (iterable) {
- for (let item of iterable) {
- if (!predicate(item)) {
- yield item;
- }
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement