@reactivex/ix-esnext-esm
Version:
The Interactive Extensions for JavaScript
39 lines (37 loc) • 1.32 kB
JavaScript
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