@modern-kit/utils
Version:
1 lines • 2.59 kB
Source Map (JSON)
{"version":3,"file":"index.mjs","sources":["../../../src/array/groupBy/index.ts"],"sourcesContent":["/**\n * @description 배열을 주어진 기준에 따라 그룹화합니다.\n *\n * `iteratee` 함수를 전달하여 반환된 키를 기준으로 항목들을 그룹화합니다. 각 키는 그룹화된 항목 배열을 포함하는 객체의 속성으로 할당됩니다.\n *\n * 24년 3월 js 신규 스펙으로 groupBy가 제공되지만 버전 호환성을 위해 해당 함수가 사용 될 수 있습니다.\n * @see https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Object/groupBy\n *\n * @template T - 배열 항목의 타입을 나타냅니다.\n * @template K - 그룹화 기준으로 사용할 키의 타입입니다.\n * @param {T[] | readonly T[]} arr - 그룹화를 진행할 항목들의 배열입니다.\n * @param {(item: T) => K} iteratee - 각 항목에 대해 그룹화 키를 반환하는 함수입니다.\n * @returns {Record<K, T[]>} - 각 키가 그룹화된 항목 배열을 가지는 객체를 반환합니다.\n *\n * @example\n * const array = [\n * { category: 'fruit', name: 'apple' },\n * { category: 'fruit', name: 'banana' },\n * { category: 'vegetable', name: 'carrot' },\n * { category: 'fruit', name: 'pear' },\n * { category: 'vegetable', name: 'broccoli' },\n * ];\n *\n * const group = groupBy(array, (item) => item.category);\n * // {\n * // fruit: [\n * // { category: 'fruit', name: 'apple' },\n * // { category: 'fruit', name: 'banana' },\n * // { category: 'fruit', name: 'pear' },\n * // ],\n * // vegetable: [\n * // { category: 'vegetable', name: 'carrot' },\n * // { category: 'vegetable', name: 'broccoli' },\n * // ],\n * // }\n */\nexport function groupBy<T, K extends PropertyKey>(\n arr: T[] | readonly T[],\n iteratee: (item: T) => K\n): Record<K, T[]> {\n const group = {} as Record<K, T[]>;\n\n for (let i = 0; i < arr.length; i++) {\n const item = arr[i];\n const key = iteratee(item);\n\n if (group[key] == null) {\n group[key] = [];\n }\n\n group[key].push(item);\n }\n\n return group;\n}\n"],"names":[],"mappings":"AAoCO,SAAS,OAAA,CACd,KACA,QAAA,EACgB;AAChB,EAAA,MAAM,QAAQ,EAAC;AAEf,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,KAAA,CAAM,GAAG,CAAA,IAAK,IAAA,EAAM;AACtB,MAAA,KAAA,CAAM,GAAG,IAAI,EAAC;AAAA,IAChB;AAEA,IAAA,KAAA,CAAM,GAAG,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAAA,EACtB;AAEA,EAAA,OAAO,KAAA;AACT;;;;"}