1234567891011121314151617181920212223242526272829303132333435 |
- this.Dedupe = class Dedupe {
- constructor(createKey) {
- this.createKey = createKey || this.defaultCreateKey;
- }
- defaultCreateKey(item) {
- return item;
- }
- /**
- * Dedupe any number of grouped elements favoring those from earlier groups.
- *
- * @param {Array} groups Contains an arbitrary number of arrays of elements.
- * @returns {Array} A matching array of each provided group deduped.
- */
- group(...groups) {
- const globalKeys = new Set();
- const result = [];
- for (const values of groups) {
- const valueMap = new Map();
- for (const value of values) {
- const key = this.createKey(value);
- if (!globalKeys.has(key) && !valueMap.has(key)) {
- valueMap.set(key, value);
- }
- }
- result.push(valueMap);
- valueMap.forEach((value, key) => globalKeys.add(key));
- }
- return result.map(m => Array.from(m.values()));
- }
- };
- const EXPORTED_SYMBOLS = ["Dedupe"];
|