@augment-vir/common
Version:
A collection of augments, helpers types, functions, and classes for any JavaScript environment.
44 lines (43 loc) • 1.16 kB
JavaScript
import { check } from '@augment-vir/assert';
/**
* Finds all duplicates.
*
* @category Array
* @category Package : @augment-vir/common
* @example
*
* ```ts
* import {extractDuplicates} from '@augment-vir/common';
*
* const result = extractDuplicates([
* 'a',
* 'b',
* '',
* 'a',
* ]);
* // result is `{duplicates: ['a'], uniques: ['b', '']}`
* ```
*
* @package [`@augment-vir/common`](https://www.npmjs.com/package/@augment-vir/common)
*/
export function extractDuplicates(items, comparator = check.strictEquals) {
const duplicates = [];
const uniques = [];
items.forEach((item) => {
const duplicatesIndex = duplicates.findIndex((duplicateEntry) => comparator(duplicateEntry, item));
if (duplicatesIndex < 0) {
const uniquesIndex = uniques.findIndex((uniqueEntry) => comparator(uniqueEntry, item));
if (uniquesIndex < 0) {
uniques.push(item);
}
else {
uniques.splice(uniquesIndex, 1);
duplicates.push(item);
}
}
});
return {
duplicates,
uniques,
};
}