Skip to content

extendWith (Lodash 兼容性)

请使用 Object.assign() 和自定义函数

extendWith 函数由于处理原型链中的继承属性和自定义合并逻辑,运行复杂且缓慢。

请使用更快、更现代的 Object.assign() 和自定义函数。

使用自定义函数将对象的自有属性和继承属性复制到另一个对象。

typescript
const result = extendWith(object, source, customizer);

参考

extendWith(object, ...sources, customizer)

使用 extendWith 通过自定义逻辑合并对象属性。它类似于 extend,但允许您决定如何合并每个属性。此函数是 assignInWith 的别名。

typescript
import { extendWith } from 'es-toolkit/compat';

// 使用自定义合并逻辑复制属性
const target = { a: 1, b: 2 };
extendWith(target, { b: 3, c: 4 }, (objValue, srcValue) => {
  return objValue === undefined ? srcValue : objValue;
});
// 返回值: { a: 1, b: 2, c: 4 }

// 连接数组的自定义合并
const obj1 = { a: [1, 2] };
const obj2 = { a: [3, 4], b: [5, 6] };
extendWith(obj1, obj2, (objValue, srcValue) => {
  if (Array.isArray(objValue)) {
    return objValue.concat(srcValue);
  }
});
// 返回值: { a: [1, 2, 3, 4], b: [5, 6] }

可以使用多个源对象。

typescript
import { extendWith } from 'es-toolkit/compat';

extendWith({ a: 1 }, { b: 2 }, { c: 3 }, (objValue, srcValue) => srcValue * 2);
// 返回值: { a: 1, b: 4, c: 6 }

参数

  • object (any): 接收属性的目标对象。
  • ...sources (any[]): 提供属性的源对象。
  • customizer (function): 确定每个属性要分配的值的函数。它接收 (objValue, srcValue, key, object, source)

返回值

(any): 返回复制了属性的对象。第一个参数 object 会被修改。

采用 MIT 许可证发布。