@codibre/fluent-iterable
Version:
Provides LINQ-like fluent api operations for iterables and async iterables (ES2018+).
30 lines (29 loc) • 1.03 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getGroupingDistinct = getGroupingDistinct;
const prepare_1 = require("../types-internal/prepare");
const filter_1 = require("../sync/filter");
function getGroupingDistinct(baseValueMapper, baseValueDistinctMapper) {
const groupMap = new Map();
if (!baseValueDistinctMapper) {
baseValueDistinctMapper = baseValueMapper;
baseValueMapper = (t) => [t];
}
const valueMapper = (0, prepare_1.prepare)(baseValueMapper);
const valueDistinctMapper = (0, prepare_1.prepare)(baseValueDistinctMapper);
return function (k, v) {
let set = groupMap.get(k);
if (!set) {
set = new Set();
groupMap.set(k, set);
}
return filter_1.filter.call(valueMapper(v), (nv) => {
const kv = valueDistinctMapper(nv);
const result = !set.has(kv);
if (result) {
set.add(kv);
}
return result;
});
};
}