UNPKG

@reactivex/ix-esnext-esm

Version:

The Interactive Extensions for JavaScript

39 lines (37 loc) 1.23 kB
import { IterableX } from './iterablex'; import { identity } from '../util/identity'; import { returnIterator } from '../util/returniterator'; export class ZipIterable extends IterableX { constructor(sources, fn) { super(); this._sources = sources; this._fn = fn; } // eslint-disable-next-line consistent-return *[Symbol.iterator]() { const fn = this._fn; const sourcesLength = this._sources.length; const its = this._sources.map(x => x[Symbol.iterator]()); while (sourcesLength > 0) { const values = new Array(sourcesLength); for (let index = -1; ++index < sourcesLength;) { const result = its[index].next(); if (result.done) { its.forEach(returnIterator); return undefined; } values[index] = result.value; } yield fn(values); } } } export function zip(...sources) { let fn = (sources.shift() || identity); if (fn && typeof fn !== 'function') { sources.unshift(fn); fn = identity; } return new ZipIterable(sources, fn); } //# sourceMappingURL=zip.mjs.map