UNPKG

@reactivex/ix-esnext-esm

Version:

The Interactive Extensions for JavaScript

32 lines (30 loc) 1.26 kB
import { AsyncIterableX } from '../asynciterablex'; import { createGrouping } from './_grouping'; import { identity } from '../../util/identity'; export class JoinAsyncIterable extends AsyncIterableX { constructor(outer, inner, outerSelector, innerSelector, resultSelector) { super(); this._outer = outer; this._inner = inner; this._outerSelector = outerSelector; this._innerSelector = innerSelector; this._resultSelector = resultSelector; } async *[Symbol.asyncIterator]() { const map = await createGrouping(this._inner, this._innerSelector, identity); for await (const outerElement of this._outer) { const outerKey = await this._outerSelector(outerElement); if (map.has(outerKey)) { for (const innerElement of map.get(outerKey)) { yield await this._resultSelector(outerElement, innerElement); } } } } } export function innerJoin(inner, outerSelector, innerSelector, resultSelector) { return function innerJoinOperatorFunction(outer) { return new JoinAsyncIterable(outer, inner, outerSelector, innerSelector, resultSelector); }; } //# sourceMappingURL=innerjoin.mjs.map