Skip to content

transform

INFO

この関数は互換性のために es-toolkit/compat からのみインポートできます。代替可能なネイティブ JavaScript API があるか、まだ十分に最適化されていないためです。

es-toolkit/compat からこの関数をインポートすると、lodash と完全に同じように動作します。

オブジェクトの値を順番に処理しながら、希望する形に累積して新しいオブジェクトを作成します。

accumulatorに初期値を提供しない場合、プロトタイプの新しい配列やオブジェクトを生成して使用します。

iteratee関数がfalseを返すと、処理を中断します。

インターフェース

typescript
export function transform<T, U>(
  object: readonly T[],
  iteratee?: (acc: U, curr: T, index: number, arr: readonly T[]) => void,
  accumulator?: U
): U;

export function transform<T, U>(
  object: Record<string, T>,
  iteratee?: (acc: U, curr: T, key: string, dict: Record<string, T>) => void,
  accumulator?: U
): U;

export function transform<T extends object, U>(
  object: T,
  iteratee?: (acc: U, curr: T[keyof T], key: keyof T, dict: Record<keyof T, T[keyof T]>) => void,
  accumulator?: U
): U;

パラメータ

  • object (readonly T[] | T): 処理するオブジェクト。
  • iteratee ((accumulator: U, value: T | T[keyof T], key: any, object: T[] | T) => unknown): 各処理で呼び出される関数。
  • accumulator (U): 初期値。

戻り値

(U): 累積された値を返します。

typescript
// Transform an array
const array = [2, 3, 4];
transform(
  array,
  (acc, value) => {
    acc += value;
    return value % 2 === 0;
  },
  0
); // => 5

// Transform an object
const obj = { a: 1, b: 2, c: 1 };
transform(
  obj,
  (result, value, key) => {
    (result[value] || (result[value] = [])).push(key);
  },
  {}
); // => { '1': ['a', 'c'], '2': ['b'] }

MIT ライセンスの下で配布されています。