UNPKG

@codibre/fluent-iterable

Version:

Provides LINQ-like fluent api operations for iterables and async iterables (ES2018+).

30 lines (29 loc) 1.03 kB
"use strict"; 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; }); }; }