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