import {FIND_VALUES_UNIQUE, findValues} from '../internal/array/find'; import type {PlainObject} from '../models'; // #region Functions /** * Get an array of unique items * * @param array Original array * @param callback Callback to get an item's value * @returns Array of unique items * * @example * ```typescript * unique( * [{id: 1}, {id: 2}, {id: 3}, {id: 2}], * item => item.id, * ); // => [{id: 1}, {id: 2}, {id: 3}] * ``` */ export function unique( array: Item[], callback: (item: Item, index: number, array: Item[]) => unknown, ): Item[]; /** * Get an array of unique items * * @param array Original array * @param key Key to use for unique value * @returns Array of unique items * * @example * ```typescript * unique( * [{id: 1}, {id: 2}, {id: 3}, {id: 2}], * 'id', * ); // => [{id: 1}, {id: 2}, {id: 3}] * ``` */ export function unique( array: Item[], key: ItemKey, ): Item[]; /** * Get an array of unique items * * @param array Original array * @returns Array of unique items * * @example * ```typescript * unique([1, 2, 3, 2]); // => [1, 2, 3] * ``` */ export function unique(array: Item[]): Item[]; export function unique(array: unknown[], key?: unknown): unknown[] { if (!Array.isArray(array)) { return []; } return array.length > 1 ? findValues(FIND_VALUES_UNIQUE, array, [key, undefined]).matched : array; } // #endregion