UNPKG

data-collectors

Version:

A collection of composable reduction operations for arbitrary streams of values

48 lines 1.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const collector_1 = require("../collector"); const toArray_1 = require("../collections/toArray"); class DistinctCollector extends collector_1.BaseCollector { constructor(keyer, collector) { super(); this.keyer = keyer; this.collector = collector; } supply() { return { keys: new Map(), items: [] }; } accumulate(container, item) { const key = this.keyer(item); if (!container.keys.has(key)) { container.keys.set(key, container.items.length); container.items.push([key, item]); } } combine(container1, container2) { const keys = new Map(container1.keys); const items = container1.items.slice(); for (let [key, item] of container2.items) { if (!keys.has(key)) { keys.set(key, items.length); items.push([key, item]); } } return { keys, items }; } finish(container) { const subContainer = this.collector.supply(); for (let [_, item] of container.items) { this.collector.accumulate(subContainer, item); } return this.collector.finish(subContainer); } } exports.DistinctCollector = DistinctCollector; function distinct(keyer, collector) { return new DistinctCollector(keyer || (x => x), collector || toArray_1.toArray()); } exports.distinct = distinct; //# sourceMappingURL=distinct.js.map