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

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

Lodash _.assignInWith() 方法

在Javascript的开发过程中,我们经常需要将多个对象的属性合并成一个新的对象。Lodash是一个流行的Javascript工具库,它为这种情况提供了一个便捷的方法-- _.assignInWith()。

功能描述

Lodash _.assignInWith()方法是用于多个对象属性的合并,它接收一系列源对象,将这些源对象的属性合并到第一个目标对象中,返回合并后的目标对象。此方法允许自定义合并规则。简单来说,它的作用是将多个对象或数组的属性合并到指定的目标对象中。

方法签名
_.assignInWith(object, [sources], [customizer])
参数说明
  • object (Object): 目标对象。
  • [sources] (...Object): 一个或多个源可以指定对象。
  • [customizer] (Function): 自定义合并函数
返回值

合并后的目标对象。

快速入门

假设我们有两个对象,对象a如下:

a = {
    name: 'Amy',
    age: 22,
}

对象b如下:

b = {
    name: 'Bob',
    sex: 'male',
}

我们可以使用_.assignInWith()方法将上述两个对象进行合并,如下所示:

_.assignInWith(a,b,(objValue,srcValue)=>{
    if(_.isUndefined(objValue)){
        return srcValue;
    }
    return objValue;
});

这里我们使用了一个自定义合并函数,以确保值的类型被正确地处理。返回值的结果为:

{
    name: 'Amy',
    age: 22,
    sex: 'male',
}
自定义合并函数

我们可以通过第三个参数customizer,来自定义合并函数。合并函数有四个参数:

  • objValue (any): 目标对象的属性值。
  • srcValue (any): 源对象的属性值。
  • key (string): 属性键。
  • object (Object): 目标对象。

自定义合并函数用于定义如何合并属性,我们可以使用自定义合并函数来覆盖默认的属性合并行为,比如我们可以通过自定义合并函数来实现只有在目标对象为空或未定义的情况才将源对象的属性复制到目标对象。

示例

例如,我们可以定义一个自定义合并函数,通过判断属性的类型,实现在合并属性时将数组转换为一个新的数组。

let object = {
  foo: [{ a: 1 }, { b: 2 }]
}
let sources = {
  foo: [[{ b: 3 }, { c: 4 }], { d: 5 }]
}

function customizer(objValue, srcValue) {
  if (_.isArray(objValue)) {
    return _.map(objValue, function (value, index) {
      return _.isPlainObject(value) && _.isPlainObject(srcValue[index])
        ? _.assignInWith(value, srcValue[index], customizer)
        : srcValue[index]
    })
  }
}
_.assignInWith(object, sources, customizer)

这里自定义了一个合并函数,来处理属性foo的值,以确保值的类型被正确地处理。返回值结果为:

{
  foo: [[{ b: 3 }, { c: 4 }], { d: 5 }]
}

这里的合并结果就是将属性foo合并到目标对象中。其中,新的属性值包含了所有的属性值,如果存在相同的属性值,则源对象中的属性值将覆盖目标对象的属性值。

总结

Lodash提供了许多方便的工具函数,包括_.assignInWith()方法。合并多个对象可以使代码更加简洁和易于维护。在实际开发中,我们需要根据不同的需求使用不同的合并方式。Lodash具有足够的灵活性,使得我们可以方便地对多个对象进行合并并自定义属性的处理。