iter-tools-es
Version:
The iterable toolbox
42 lines (34 loc) • 896 B
JavaScript
const {
iterableCurry
} = require('../../internal/iterable.js');
const {
__peekerate
} = require('../$peekerate/peekerate.js');
function __findBestOr(iterable, notFoundValue, comparer, mapper = value => value) {
const peekr = __peekerate(iterable);
if (peekr.done) {
return notFoundValue;
} else {
let best = peekr.value;
let bestValue = mapper(best, peekr.index);
peekr.advance();
while (!peekr.done) {
const candidate = peekr.value;
const candidateValue = mapper(candidate, peekr.index);
if (comparer(bestValue, candidateValue)) {
best = candidate;
bestValue = candidateValue;
}
peekr.advance();
}
return best;
}
}
exports.__findBestOr = __findBestOr;
const findBestOr = iterableCurry(__findBestOr, {
reduces: true,
minArgs: 2,
maxArgs: 3,
growRight: true
});
exports.findBestOr = findBestOr;