UNPKG

@modern-kit/utils

Version:
1 lines 2.33 kB
{"version":3,"file":"index.cjs","sources":["../../../src/array/uniq/index.ts"],"sourcesContent":["/**\n * @description 배열에서 중복된 요소를 제거하여 고유한 요소로 이루어진 새 배열을 반환합니다.\n *\n * 기본적으로 `원시 값`에 대해서만 중복 요소를 판단합니다.\n *\n * 2번째 인자인 `iteratee` 함수를 제공하면, 각 요소를 iteratee 반환값에 따라 중복 여부를 판단할 수 있습니다.\n *\n * @template T - 배열 요소의 타입\n * @template U - `iteratee` 함수가 반환하는 값의 타입으로, 중복 판단에 사용됩니다.\n *\n * @param {T[] | readonly T[]} arr - 중복을 제거하고자 하는 배열입니다.\n * @param {(item: T) => U} iteratee - 각 요소를 특정 값으로 변환하여 중복 여부를 판단하는 함수입니다.\n *\n * @returns {T[]} 고유한 요소만 포함하는 새 배열을 반환합니다. `iteratee`가 제공되면, 변환된 값 기준으로 중복이 제거된 배열이 반환됩니다.\n *\n * @example\n * uniq([1, 2, 2, 3, 4]); // [1, 2, 3, 4]\n *\n * @example\n * uniq([{ id: 1 }, { id: 2 }, { id: 1 }], item => item.id); // [{ id: 1 }, { id: 2 }]\n */\nexport function uniq<T>(arr: T[] | readonly T[]): T[];\n\nexport function uniq<T, U = T>(\n arr: T[] | readonly T[],\n iteratee?: (item: T) => U\n): T[];\n\nexport function uniq<T, U = T>(\n arr: T[] | readonly T[],\n iteratee?: (item: T) => U\n): T[] {\n if (!iteratee) {\n return Array.from(new Set(arr));\n }\n\n const map = new Map<U, T>();\n\n for (let i = 0; i < arr.length; i++) {\n const item = arr[i];\n const key = iteratee(item);\n\n if (!map.has(key)) {\n map.set(key, item);\n }\n }\n\n return Array.from(map.values());\n}\n"],"names":[],"mappings":";;AA4BO,SAAS,IAAA,CACd,KACA,QAAA,EACK;AACL,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAI,GAAA,CAAI,GAAG,CAAC,CAAA;AAAA,EAChC;AAEA,EAAA,MAAM,GAAA,uBAAU,GAAA,EAAU;AAE1B,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,QAAQ,CAAA,EAAA,EAAK;AACnC,IAAA,MAAM,IAAA,GAAO,IAAI,CAAC,CAAA;AAClB,IAAA,MAAM,GAAA,GAAM,SAAS,IAAI,CAAA;AAEzB,IAAA,IAAI,CAAC,GAAA,CAAI,GAAA,CAAI,GAAG,CAAA,EAAG;AACjB,MAAA,GAAA,CAAI,GAAA,CAAI,KAAK,IAAI,CAAA;AAAA,IACnB;AAAA,EACF;AAEA,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,CAAA;AAChC;;;;"}