/** * Remove duplicates from an array, keeping the first occurrence of an element. * * @tsplus static ImmutableArray.Aspects uniq * @tsplus pipeable ImmutableArray uniq */ export function uniq(E: Equivalence) { return (self: ImmutableArray): ImmutableArray => { const includes = arrayIncludes(E) const result: Array = [] const length = self.array.length let i = 0 for (; i < length; i = i + 1) { const a = self.array[i]! if (!includes(result, a)) { result.push(a) } } return length === result.length ? self : new ImmutableArray(result) } } function arrayIncludes(E: Equivalence) { return (array: Array, value: A): boolean => { for (let i = 0; i < array.length; i = i + 1) { const element = array[i]! if (E.equals(value, element)) { return true } } return false } }