@modern-kit/utils
Version:
1 lines • 1.91 kB
Source Map (JSON)
{"version":3,"file":"index.cjs","sources":["../../../src/array/flatten/index.ts"],"sourcesContent":["/**\n * @description 중첩 배열을 지정된 깊이까지 평탄화 합니다.\n *\n * Array.prototype.flat과 동일하게 동작합니다. 하지만 성능이 더 우수합니다.(약 6~7배)\n *\n * @template T - 배열 요소의 유형입니다.\n * @template D - 평탄화 깊이의 유형입니다.\n * @param {T[] | readonly T[]} arr - 평탄화할 중첩 배열입니다.\n * @param {D} [depth=1] - 평탄화할 깊이입니다. 기본값은 1입니다.\n * @returns {FlatArray<T[], D>[]} 평탄화된 새로운 배열을 반환합니다.\n *\n * @example\n * const arr = [1, [2, 3], [4, [5, 6]]];\n *\n * flatten(arr, 1);\n * // [1, 2, 3, 4, [5, 6]]\n *\n * flatten(arr, 2);\n * // [1, 2, 3, 4, 5, 6]\n */\nexport function flatten<T, D extends number = 1>(\n arr: T[] | readonly T[],\n depth: D = 1 as D\n): FlatArray<T[], D>[] {\n const result: FlatArray<T[], D>[] = [];\n const flooredDepth = Math.floor(depth);\n\n const recursive = (arr: readonly T[], currentDepth: number) => {\n for (const item of arr) {\n if (Array.isArray(item) && currentDepth < flooredDepth) {\n recursive(item, currentDepth + 1);\n } else {\n result.push(item as FlatArray<T[], D>);\n }\n }\n };\n\n recursive(arr, 0);\n return result;\n}\n"],"names":["arr"],"mappings":";;AAoBO,SAAS,OAAA,CACd,GAAA,EACA,KAAA,GAAW,CAAA,EACU;AACrB,EAAA,MAAM,SAA8B,EAAC;AACrC,EAAA,MAAM,YAAA,GAAe,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAErC,EAAA,MAAM,SAAA,GAAY,CAACA,IAAAA,EAAmB,YAAA,KAAyB;AAC7D,IAAA,KAAA,MAAW,QAAQA,IAAAA,EAAK;AACtB,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,IAAK,eAAe,YAAA,EAAc;AACtD,QAAA,SAAA,CAAU,IAAA,EAAM,eAAe,CAAC,CAAA;AAAA,MAClC,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,KAAK,IAAyB,CAAA;AAAA,MACvC;AAAA,IACF;AAAA,EACF,CAAA;AAEA,EAAA,SAAA,CAAU,KAAK,CAAC,CAAA;AAChB,EAAA,OAAO,MAAA;AACT;;;;"}