Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 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 | 1x 1x 3x 3x | import { concat } from "./concat";
import { zip } from "./zip";
type ExtractValue<T extends ReadonlyArray<Iterable<unknown>>> = {
[K in keyof T]: T[K] extends Iterable<infer V> ? V | undefined : never;
};
/**
* Interleaves the elements of multiple {@link Iterable}s.
*
* @example
* ```ts
* const iterable1 = [1, 2, 3];
* const iterable2 = [9, 8];
* const result = interleave(iterable1, iterable2);
* console.log(result); // 1 ... 9 ... 2 ... 8 .. 3 ... undefined
* ```
*
* @todo
* Don't yield undefined, if elements don't exist, or provide optional
* default value.
*
* @param iterables - the {@link Iterable}s to interleave
* @returns the interleaved {@link Iterable}
*/
export const interleave = <TArgs extends Iterable<unknown>[]>(
...iterables: TArgs
): IterableIterator<ExtractValue<TArgs>> => {
return concat(zip(...iterables)) as IterableIterator<ExtractValue<TArgs>>;
};
|