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">