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 | undefined | null): 返回累积的值。

示例

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 许可证发布。