iter-tools-es
Version:
The iterable toolbox
43 lines (34 loc) • 779 B
JavaScript
const {
iterableCurry
} = require('../../internal/iterable.js');
const {
defaultCompareOrder
} = require('../../internal/compare.js');
const {
Heap
} = require('./internal/heap.js');
function* __takeSorted(source, n = Infinity, compare = defaultCompareOrder) {
const heap = new Heap(compare);
for (const value of source) {
heap.push(value);
if (heap.size > n) {
heap.pop();
}
}
while (heap.size) {
yield heap.pop();
}
}
exports.__takeSorted = __takeSorted;
const takeSorted = /*#__PURE__*/iterableCurry(__takeSorted, {
minArgs: 0,
maxArgs: 2,
validateArgs(args) {
if (typeof args[1] === 'function') {
const temp = args[2];
args[2] = args[1];
args[1] = temp;
}
}
});
exports.takeSorted = takeSorted;