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