ix
Version:
The Interactive Extensions for JavaScript
32 lines (30 loc) • 997 B
JavaScript
import { IterableX } from './iterablex.mjs';
import { returnIterator } from '../util/returniterator.mjs';
/** @ignore */
export class ZipIterable extends IterableX {
constructor(sources) {
super();
this._sources = sources;
}
// eslint-disable-next-line consistent-return
*[Symbol.iterator]() {
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 values;
}
}
}
export function zip(...sources) {
return new ZipIterable(sources);
}
//# sourceMappingURL=zip.mjs.map