UNPKG

@reactivex/ix-esnext-esm

Version:

The Interactive Extensions for JavaScript

39 lines (37 loc) 1.32 kB
import { IterableX } from '../iterablex'; import { identity } from '../../util/identity'; import { createGrouping } from './_grouping'; export class GroupedIterable extends IterableX { constructor(key, source) { super(); this.key = key; this._source = source; } [Symbol.iterator]() { return this._source[Symbol.iterator](); } } export class GroupByIterable extends IterableX { constructor(source, keySelector, elementSelector, resultSelector) { super(); this._source = source; this._keySelector = keySelector; this._elementSelector = elementSelector; this._resultSelector = resultSelector; } *[Symbol.iterator]() { const map = createGrouping(this._source, this._keySelector, this._elementSelector); for (const [key, values] of map) { yield this._resultSelector(key, values); } } } export function groupByResultIdentity(key, values) { return new GroupedIterable(key, values); } export function groupBy(keySelector, elementSelector = identity, resultSelector = groupByResultIdentity) { return function groupByOperatorFunction(source) { return new GroupByIterable(source, keySelector, elementSelector, resultSelector); }; } //# sourceMappingURL=groupby.mjs.map