iter-tools-es
Version:
The iterable toolbox
38 lines (31 loc) • 707 B
JavaScript
const {
iterableCurry
} = require('../../internal/iterable.js');
const {
__interleave
} = require('../$interleave/interleave.js');
function* byComparison({
compare
}, all, ...peekrs) {
let candidate;
while (!all.done) {
candidate = all.value;
for (const peekr of peekrs) {
if (!peekr.done && compare(peekr.value, candidate.value) < 0) {
candidate = peekr;
}
}
yield candidate.value;
candidate.advance();
}
}
function __collate(sources, compare) {
return __interleave(sources, byComparison, {
compare
});
}
exports.__collate = __collate;
const collate = /*#__PURE__*/iterableCurry(__collate, {
variadic: true
});
exports.collate = collate;