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