UNPKG

iter-tools-es

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