UNPKG

@reactivex/ix-esnext-esm

Version:

The Interactive Extensions for JavaScript

32 lines (30 loc) 1.2 kB
import { IterableX } from '../iterablex'; import { createGrouping } from './_grouping'; import { identity } from '../../util/identity'; export class JoinIterable 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); if (map.has(outerKey)) { for (const innerElement of map.get(outerKey)) { yield this._resultSelector(outerElement, innerElement); } } } } } export function innerJoin(inner, outerSelector, innerSelector, resultSelector) { return function innerJoinOperatorFunction(outer) { return new JoinIterable(outer, inner, outerSelector, innerSelector, resultSelector); }; } //# sourceMappingURL=innerjoin.mjs.map