Skip to main content

invert

Creates a new object by inverting each key and value of the given object.

By default, it inverts the keys and values of the object. If an iteratee function is provided, it generates a transformed key for each value to invert.


Code

🔗 View source code

Benchmark

  • hz: operations per second
  • mean: average response time (ms)

Default

NamehzmeanPerformance
modern-kit/invert6,119,008.750.0002fastest
lodash/invert4,459,920.520.0003slowest
  • modern-kit/invert
    • 1.37x faster than lodash/invert

with iteratee

NamehzmeanPerformance
modern-kit/invert4,154,655.710.0003fastest
lodash/invertBy2,262,596.790.0004slowest
  • modern-kit/invert
    • 1.84x faster than lodash/invertBy

Interface

typescript
function invert<K extends PropertyKey, V extends PropertyKey>(
obj: Record<K, V>
): Record<V, K>;

function invert<K extends PropertyKey, V, TK extends PropertyKey>(
obj: Record<K, V>,
iteratee: (iterateData: { value: V; key: K; obj: Record<K, V> }) => TK
): Record<TK, K>;

Usage

Basic Usage

typescript
import { invert } from '@modern-kit/utils';

const obj = { a: 1, b: 2, c: 3 };

invert(obj);
// value: { 1: 'a', 2: 'b', 3: 'c' };
// type: Record<number, "a" | "b" | "c">

Iteratee Usage

typescript
import { invert } from '@modern-kit/utils';

const obj = {
a: { name: 'foo' },
b: { name: 'bar' },
} as const;

invert(obj, (value) => value.name);
// value: { foo: 'a', bar: 'b' }
// type: Record<"foo" | "bar", "a" | "b">