import { allEqualsTo } from "./allEqualsTo"; import { ReduceArguments, toReduceArguments } from "./reduceify"; export function arrRemoveDuplicates( arr: readonly ArrOf[], areEquals: (e1: ArrOf, e2: ArrOf) => boolean = (e1, e2) => e1 === e2 ): ArrOf[] { return arr.reduce( (prev, curr) => [ ...prev, ...prev .map(e => areEquals(curr, e)) .reduce(...allEqualsTo(false)) ? [curr] : [] ], [] ); } export function removeDuplicates( areEquals?: (e1: ArrOf, e2: ArrOf) => boolean ): ReduceArguments { return toReduceArguments(arrRemoveDuplicates, areEquals); } export function removeDuplicatesFactory({ areEquals }: { areEquals: (e1: T, e2: T) => boolean; }) { return { "removeDuplicates": () => removeDuplicates(areEquals) }; }