UNPKG

iter-tools-es

Version:
42 lines (34 loc) 896 B
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;