iterama
Version:
Composable functional (async) iterable helpers
57 lines (41 loc) • 1.04 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.take = void 0;
var _circularr = _interopRequireDefault(require("circularr"));
var _iterate = require("./iterate");
const takeFirst = n => iterable => ({
*[Symbol.iterator]() {
if (n <= 0) {
return;
}
let i = 0;
for (const value of iterable) {
yield value;
if (++i >= n) {
break;
}
}
}
});
const takeLast = n => iterable => ({
*[Symbol.iterator]() {
const last = new _circularr.default(n);
let numValues = 0;
for (const value of iterable) {
last.shift(value);
++numValues;
}
const iterator = (0, _iterate.iterate)(last);
const offset = last.length - numValues;
for (let i = 0; i < offset; i++) {
iterator.next();
}
for (const value of iterator) {
yield value;
}
}
});
const take = n => n < 0 ? takeLast(-n) : takeFirst(n);
exports.take = take;