UNPKG

@modern-kit/utils

Version:
1 lines 2.13 kB
{"version":3,"file":"index.cjs","sources":["../../../src/array/intersection/index.ts"],"sourcesContent":["/**\n * @description 두 배열 내에서 동일하게 존재하는, `교차된 값(교집합)`에 대한 새로운 배열을 반환하는 함수입니다.\n *\n * 첫번째 배열을 기준으로 `중복된 값을 포함`합니다.\n *\n * @template T - 배열 요소의 유형입니다.\n * @template U - iteratee 함수에서 반환되는 배열 요소들의 타입입니다.\n *\n * @param {T[] | readonly T[]} firstArr - 비교할 첫 번째 배열입니다.\n * @param {T[] | readonly T[]} secondArr - 비교할 두 번째 배열입니다.\n * @param {(item: T) => U} iteratee - 새로운 배열 요소를 생성하는 함수입니다. 제공된 경우, 이 함수의 결과를 기준으로 요소들이 비교됩니다.\n *\n * @returns {T[]} - `firstArr`과 `secondArr` 모두에 존재하는 고유한 요소들로 구성된 배열을 반환합니다.\n *\n * @example\n * intersectionWithDuplicates([1, 2, 2, 3], [2, 3, 4]);\n * // [2, 2, 3]\n *\n * @example\n * intersectionWithDuplicates(\n * [{ id: 1 }, { id: 2 }, { id: 2 }],\n * [{ id: 2 }, { id: 3 }],\n * item => item.id\n * );\n * // [{ id: 2 }, { id: 2 }]\n */\nexport function intersection<T, U>(\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":";;AA0BO,SAAS,YAAA,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,SAAS,MAAA,CAAO,CAAC,SAASA,UAAAA,CAAU,GAAA,CAAI,IAAI,CAAC,CAAA;AAAA,EACtD;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,OAAO,CAAC,IAAA,KAAS,UAAU,GAAA,CAAI,QAAA,CAAS,IAAI,CAAC,CAAC,CAAA;AAChE;;;;"}