@technobuddha/library
Version:
A large library of useful functions
51 lines • 2.74 kB
JavaScript
/**
* 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=