UNPKG

1.2 kBJavaScriptView Raw
1import { AsyncIterableX } from './asynciterablex';
2import { createGrouping } from './_grouping';
3import { identity } from '../internal/identity';
4export class JoinAsyncIterable extends AsyncIterableX {
5 constructor(outer, inner, outerSelector, innerSelector, resultSelector) {
6 super();
7 this._outer = outer;
8 this._inner = inner;
9 this._outerSelector = outerSelector;
10 this._innerSelector = innerSelector;
11 this._resultSelector = resultSelector;
12 }
13 async *[Symbol.asyncIterator]() {
14 const map = await createGrouping(this._inner, this._innerSelector, identity);
15 for await (let outerElement of this._outer) {
16 const outerKey = await this._outerSelector(outerElement);
17 if (map.has(outerKey)) {
18 for (let innerElement of map.get(outerKey)) {
19 yield await this._resultSelector(outerElement, innerElement);
20 }
21 }
22 }
23 }
24}
25export function innerJoin(outer, inner, outerSelector, innerSelector, resultSelector) {
26 return new JoinAsyncIterable(outer, inner, outerSelector, innerSelector, resultSelector);
27}
28
29//# sourceMappingURL=innerjoin.mjs.map