UNPKG

@modern-kit/utils

Version:
1 lines 2.67 kB
{"version":3,"file":"index.mjs","sources":["../../../src/object/invert/index.ts"],"sourcesContent":["import { objectKeys } from '../../object/objectKeys';\n\n/**\n * @description 주어진 객체의 각 키와 값을 반전하여 새로운 객체를 생성합니다.\n *\n * 기본적으로 객체의 키와 값을 반전하지만, `iteratee` 함수를 제공하면 각 값에 대해 변형된 키를 생성하여 반전할 수 있습니다.\n *\n * @template K - 원래 객체의 키 타입입니다.\n * @template V - 원래 객체의 값 타입입니다.\n * @template TK - iteratee를 통해 변형된 키의 타입입니다.\n * @param {Record<K, V>} obj - 키와 값을 반전할 객체입니다.\n * @param {(iterateData?: { value: V; key: K; obj: Record<K, V> }) => TK} iteratee - 값을 변형하여 반전할 키를 생성하는 함수입니다.\n * @returns {Record<TK, K>} 키와 값이 반전된 새로운 객체를 반환합니다.\n *\n * @example\n * const original = { a: \"1\", b: \"2\", c: \"3\" };\n * const inverted = invert(original);\n *\n * inverted; // { 1: \"a\", 2: \"b\", 3: \"c\" }\n *\n * @example\n * const original = { a: \"1\", b: \"2\", c: \"3\" };\n * const customInverted = invert(original, ({ value }) => `key-${value}`);\n *\n * customInverted; // { \"key-1\": \"a\", \"key-2\": \"b\", \"key-3\": \"c\" }\n */\nexport function invert<K extends PropertyKey, V extends PropertyKey>(\n obj: Record<K, V>\n): Record<V, K>;\n\nexport function invert<K extends PropertyKey, V, TK extends PropertyKey>(\n obj: Record<K, V>,\n iteratee: (iterateData: { value: V; key: K; obj: Record<K, V> }) => TK\n): Record<TK, K>;\n\nexport function invert<\n K extends PropertyKey,\n V extends PropertyKey,\n TK extends PropertyKey\n>(\n obj: Record<K, V>,\n iteratee?: (iterateData: { value: V; key: K; obj: Record<K, V> }) => TK\n): Record<V | TK, K> {\n const result = {} as Record<V | TK, K>;\n const keys = objectKeys(obj);\n\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const value = obj[key];\n\n const transformedKey = iteratee ? iteratee({ value, key, obj }) : value;\n\n result[transformedKey] = key;\n }\n\n return result;\n}\n"],"names":[],"mappings":";;AAmCO,SAAS,MAAA,CAKd,KACA,QAAA,EACmB;AACnB,EAAA,MAAM,SAAS,EAAC;AAChB,EAAA,MAAM,IAAA,GAAO,WAAW,GAAG,CAAA;AAE3B,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,IAAA,MAAM,GAAA,GAAM,KAAK,CAAC,CAAA;AAClB,IAAA,MAAM,KAAA,GAAQ,IAAI,GAAG,CAAA;AAErB,IAAA,MAAM,cAAA,GAAiB,WAAW,QAAA,CAAS,EAAE,OAAO,GAAA,EAAK,GAAA,EAAK,CAAA,GAAI,KAAA;AAElE,IAAA,MAAA,CAAO,cAAc,CAAA,GAAI,GAAA;AAAA,EAC3B;AAEA,EAAA,OAAO,MAAA;AACT;;;;"}