@modern-kit/utils
Version:
1 lines • 2.44 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","sources":["../../../src/array/difference/index.ts"],"sourcesContent":["/**\n * @description 첫 번째 배열에서 두 번째 배열에 없는 요소들을 반환하는 함수입니다.\n *\n * `iteratee` 함수를 제공하여 각 요소를 변환한 후 결과 값을 기반으로 비교할 수 있습니다.\n *\n * @template T - 첫 번째 배열의 요소 타입입니다.\n * @template U - `iteratee` 함수가 반환하는 타입으로, 기본값은 `T`와 같습니다.\n * @param {T[] | readonly T[]} firstArr - 차집합을 구할 기준이 되는 첫 번째 배열입니다.\n * @param {T[] | readonly T[]} secondArr - 첫 번째 배열에서 제거할 요소들이 포함된 두 번째 배열입니다.\n * @param {(item: T) => U} [iteratee] - 각 배열 요소를 비교하기 전에 변환하는 함수입니다. 이 함수가 제공되면, 변환된 결과를 기준으로 비교합니다.\n * @returns {T[]} 두 번째 배열에 없는 첫 번째 배열의 요소들이 담긴 배열을 반환합니다.\n *\n * @example\n * // 기본 사용 예제\n * const arr1 = [1, 2, 3, 4];\n * const arr2 = [2, 4];\n *\n * difference(arr1, arr2); // [1, 3]\n *\n * @example\n * // iteratee 함수 사용 예제\n * const users = [\n * { id: 1, name: 'john' },\n * { id: 2, name: 'front' },\n * ];\n * const activeUserIds = [\n * { id: 1, name: 'john' },\n * { id: 3, name: 'bgzt' },\n * ];\n *\n * difference(users, activeUserIds, user => user.id));\n * // [{ id: 2, name: 'front' }]\n */\nexport function difference<T, U = T>(\n firstArr: T[] | readonly T[],\n secondArr: T[] | readonly T[],\n iteratee?: (item: T) => U\n): T[] {\n if (!iteratee) {\n const secondSet = new Set(secondArr);\n return firstArr.filter((item) => !secondSet.has(item));\n }\n\n const secondSet = new Set(secondArr.map((item) => iteratee(item)));\n return firstArr.filter((item) => !secondSet.has(iteratee(item)));\n}\n"],"names":["secondSet"],"mappings":"AAiCO,SAAS,UAAA,CACd,QAAA,EACA,SAAA,EACA,QAAA,EACK;AACL,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,MAAMA,UAAAA,GAAY,IAAI,GAAA,CAAI,SAAS,CAAA;AACnC,IAAA,OAAO,QAAA,CAAS,OAAO,CAAC,IAAA,KAAS,CAACA,UAAAA,CAAU,GAAA,CAAI,IAAI,CAAC,CAAA;AAAA,EACvD;AAEA,EAAA,MAAM,SAAA,GAAY,IAAI,GAAA,CAAI,SAAA,CAAU,GAAA,CAAI,CAAC,IAAA,KAAS,QAAA,CAAS,IAAI,CAAC,CAAC,CAAA;AACjE,EAAA,OAAO,QAAA,CAAS,MAAA,CAAO,CAAC,IAAA,KAAS,CAAC,UAAU,GAAA,CAAI,QAAA,CAAS,IAAI,CAAC,CAAC,CAAA;AACjE;;;;"}