UNPKG

@lou.codes/iterables

Version:
32 lines (31 loc) 921 B
import { createIterableIterator } from "./createIterableIterator.js"; /** * Take the given amount of items from the iterable. * * @category Generators * @example * ```typescript * const take2 = take(2); * take2([1, 2, 3, 4, 5]); // [1, 2] * ``` * @param amount Amount of items to take. * @returns Curried function with `amount` in context. */ export const take = amount => iterable => createIterableIterator(function* () { let count = 0n; // eslint-disable-next-line functional/no-conditional-statements if (amount > 0) { // eslint-disable-next-line functional/no-loop-statements for (const item of iterable) { // eslint-disable-next-line @typescript-eslint/no-unused-expressions, functional/no-conditional-statements if (count < amount) { yield item; // eslint-disable-next-line functional/no-expression-statements count += 1n; } else { break; } } } });