iteragain
Version:
Javascript Iterable/Iterator/Generator-function utilities.
42 lines • 1.55 kB
JavaScript
/** An iterator that yields non-overlapping values in chunks (tuples) of a certain `size`. */
var ChunksIterator = /** @class */ (function () {
function ChunksIterator(iterator, length, fill) {
this.iterator = iterator;
this.length = length;
this.fill = fill;
this.done = false;
this.chunk = [];
}
ChunksIterator.prototype[Symbol.iterator] = function () {
return this;
};
ChunksIterator.prototype.next = function () {
var _a;
var _this = this;
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
if (this.done)
return { done: true, value: undefined };
for (var i = 0; i < this.length; i++) {
var next = (_a = this.iterator).next.apply(_a, args);
if (next.done) {
this.done = true;
if (this.chunk.length) {
if (this.fill !== undefined) {
this.chunk = this.chunk.concat(Array.from({ length: this.length - this.chunk.length }, function (_) { return _this.fill; }));
}
break;
}
return { done: true, value: undefined };
}
this.chunk.push(next.value);
}
return { done: false, value: this.chunk.splice(0, this.length) };
};
return ChunksIterator;
}());
export { ChunksIterator };
export default ChunksIterator;
//# sourceMappingURL=ChunksIterator.js.map