UNPKG

@reactivex/ix-esnext-esm

Version:

The Interactive Extensions for JavaScript

52 lines (50 loc) 1.33 kB
import { IterableX } from '../iterablex'; /** * @ignore */ export function defaultCompare(key, minValue) { // eslint-disable-next-line no-nested-ternary return key > minValue ? 1 : key < minValue ? -1 : 0; } /** * @ignore */ class ExtremaByIterable extends IterableX { constructor(source, keyFn, cmp) { super(); this._source = source; this._keyFn = keyFn; this._cmp = cmp; } *[Symbol.iterator]() { let result = []; let next; const it = this._source[Symbol.iterator](); if ((next = it.next()).done) { throw new Error('Sequence contains no elements'); } const current = next.value; let resKey = this._keyFn(current); result.push(current); while (!(next = it.next()).done) { const curr = next.value; const key = this._keyFn(curr); const c = this._cmp(key, resKey); if (c === 0) { result.push(curr); } else if (c > 0) { result = [curr]; resKey = key; } } yield* result; } } /** * @ignore */ export function extremaBy(source, keyFn, cmp) { return new ExtremaByIterable(source, keyFn, cmp); } //# sourceMappingURL=_extremaby.mjs.map