📜  Lodash _.extendWith() 方法(1)

📅  最后修改于: 2023-12-03 15:02:46.508000             🧑  作者: Mango

Lodash _.extendWith() 方法

简介

Lodash是一个流行的JavaScript工具库,提供了很多实用的工具函数来简化JavaScript代码的开发。其中,_.extendWith()方法是Lodash库中的一个函数,用于将一个或多个源对象的属性合并到目标对象中。

语法
_.extendWith(object, sources, customizer)
  • object(Object):要扩展的目标对象。
  • sources(...Object):一个或多个源对象。
  • customizer(Function):一个自定义函数,用于指定合并行为。
用法

_.extendWith()方法的主要作用是合并一个或多个源对象的属性到目标对象中。源对象的属性将覆盖目标对象中同名的属性,也就是说,如果有相同属性名的情况下,后面的源对象将覆盖前面的源对象。

_.extendWith(object, sources);
示例:
const _ = require('lodash');

const person = {
  name: 'John',
  age: 30
};

const info = {
  age: 35,
  occupation: 'Engineer'
};

const result = _.extendWith(person, info);

console.log(result);
// Output: { name: 'John', age: 35, occupation: 'Engineer' }

在上面的示例中,person对象是目标对象,info对象是源对象。通过调用_.extendWith()方法,将info对象的属性合并到person对象中,输出结果为{ name: 'John', age: 35, occupation: 'Engineer' }

自定义合并行为

_.extendWith()方法还支持自定义合并行为。通过传递一个自定义函数作为customizer参数,可以控制属性的合并方式。

_.extendWith(object, sources, customizer);

自定义函数将接收四个参数:目标属性的值(objectValue)、源属性的值(sourceValue)、属性名(key)和目标对象(object)。

如果自定义函数返回undefined,则由Lodash库决定如何合并属性。如果自定义函数返回其他值,则该值将作为合并后的属性值。

示例:
const _ = require('lodash');

const person = {
  name: 'John',
  age: 30
};

const info = {
  age: 35,
  occupation: 'Engineer'
};

const customizer = (objectValue, sourceValue) => {
  if (_.isUndefined(objectValue)) {
    return sourceValue;
  }
  if (_.isArray(objectValue) && _.isArray(sourceValue)) {
    return objectValue.concat(sourceValue);
  }
};

const result = _.extendWith(person, info, customizer);

console.log(result);
// Output: { name: 'John', age: [30, 35], occupation: 'Engineer' }

在上面的示例中,我们自定义了一个合并函数。如果属性值为数组,我们将合并两个数组的元素;如果属性值不存在于目标对象中,则直接用源对象的属性值。

总结

_.extendWith()方法是Lodash库中的一个实用函数,用于将一个或多个源对象的属性合并到目标对象中。它提供了默认的属性合并行为,并支持自定义函数来控制属性的合并方式。使用该方法可以简化JavaScript代码的开发,提高开发效率。