iterama
Version:
Composable functional (async) iterable helpers
52 lines (37 loc) • 1.03 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.skip = void 0;
var _circularr = _interopRequireDefault(require("circularr"));
var _iterate = require("./iterate");
const skipFirst = n => iterable => ({
*[Symbol.iterator]() {
const iterator = (0, _iterate.iterate)(iterable);
let i = 0;
while (i < n && !iterator.next().done) {
i++;
}
for (const value of iterator) {
yield value;
}
}
});
const skipLast = n => iterable => ({
*[Symbol.iterator]() {
const iterator = (0, _iterate.iterate)(iterable);
const last = new _circularr.default(n);
for (let i = 0; i < n; i++) {
const result = iterator.next();
if (result.done) {
break;
}
last.shift(result.value);
}
for (const value of iterator) {
yield last.shift(value);
}
}
});
const skip = n => n < 0 ? skipLast(-n) : skipFirst(n);
exports.skip = skip;