UNPKG

@technobuddha/library

Version:
51 lines 2.74 kB
/** * Generates pairs of consecutive elements from the input array, with optional handling for the last * element. * @typeParam T - The type of elements in the input array. * @param array - The array to iterate over. * @param options - Optional configuration for handling the last element. * @returns A generator yielding a tuple containing each element, the next element in the sequence, * and the index of the element within the sequence. Optionally, a tuple is generated for the last * element as specified by options. * @example * ```typescript * // Basic usage * const arr = [1, 2, 3]; * for (const [current, next] of lookAhead(arr)) { * console.log(current, next); * } * // [1, 2], [2, 3] * * // With wrapAround * for (const [current, next] of lookAhead(arr, { wrapAround: true })) { * console.log(current, next); * } * // [1, 2], [2, 3], [3, 1] * ``` * * With last * ```typescript * for (const [current, next] of lookAhead(arr, { last: 0 })) { * console.log(current, next); * } * // [1, 2], [2, 3], [3, 0] * ``` * @group Array * @category Iteration */ export function* lookAhead(array, options) { if (array.length > 0) { for (let i = 0; i < array.length - 1; ++i) { yield [array[i], array[i + 1], i]; } if (options) { if ('last' in options) { yield [array.at(-1), options.last, array.length - 1]; } else if (options.wrapAround) { yield [array.at(-1), array.at(0), array.length - 1]; } } } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9vay1haGVhZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9sb29rLWFoZWFkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW9CQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtDRztBQUNILE1BQU0sU0FBUyxDQUFDLENBQUMsU0FBUyxDQUN4QixLQUFVLEVBQ1YsT0FBNkI7SUFFN0IsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3JCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQzFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBRUQsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLElBQUksTUFBTSxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUN0QixNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBRSxFQUFFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN4RCxDQUFDO2lCQUFNLElBQUksT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUM5QixNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFFLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN4RCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDIn0=