UNPKG

@reactivex/ix-esnext-esm

Version:

The Interactive Extensions for JavaScript

32 lines (30 loc) 1.22 kB
import { IterableX } from '../iterablex'; import { createGrouping } from './_grouping'; import { empty } from '../empty'; import { identity } from '../../util/identity'; export class GroupJoinIterable extends IterableX { constructor(outer, inner, outerSelector, innerSelector, resultSelector) { super(); this._outer = outer; this._inner = inner; this._outerSelector = outerSelector; this._innerSelector = innerSelector; this._resultSelector = resultSelector; } *[Symbol.iterator]() { const map = createGrouping(this._inner, this._innerSelector, identity); for (const outerElement of this._outer) { const outerKey = this._outerSelector(outerElement); const innerElements = map.has(outerKey) ? map.get(outerKey) : empty(); yield this._resultSelector(outerElement, innerElements); } } } export function groupJoin(inner, outerSelector, innerSelector, resultSelector) { return function groupJoinOperatorFunction(outer) { return new GroupJoinIterable(outer, inner, outerSelector, innerSelector, resultSelector); }; } //# sourceMappingURL=groupjoin.mjs.map