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

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

Lodash _.setWith() 方法

_.setWith() 方法是 Lodash 库中的一个函数,它接收三个参数:

  1. object:要修改的对象。
  2. path:要设置的属性路径。
  3. value:要设置的值。

这个方法通过指定的路径来设置对象中的值。如果对象中不存在该路径,则可以选择创建它。与 _.set 不同的是,_.setWith 允许你自定义创建值时使用的方法。

语法
_.setWith(object, path, value, customizer)
参数
  • object:必需,要修改的对象。
  • path:必需,字符串或者字符串数组,表示要设置的属性路径。
  • value: 必需,要设置的值。
  • customizer: 可选,自定义设置创建值的方法。
返回值

修改后的对象。

用法
基本用法

下面是 _.setWith() 最基本的用法,我们设置了 obj.name.first 属性的值为 John

const _ = require('lodash');
const obj = {};

_.setWith(obj, 'name.first', 'John', Object);
console.log(obj); // { name: { first: 'John' } }

在这个例子中,我们传递了一个空对象给 _.setWith(),然后通过路径 name.first 设置了值。

自定义创建值的方式

_.setWith() 方法允许你自定义创建值的方法,这个方法可以在设置值之前对设置的值进行处理。例如下面我们将 name 属性设置为一个数组,这样以后我们可以通过数组往里面添加更多的名字,name 的初始值为空数组。

const _ = require('lodash');
const obj = {};

_.setWith(obj, 'name', [], Object);
_.setWith(obj, 'name[0]', 'John', Object);
_.setWith(obj, 'name[1]', 'Doe', Object);

console.log(obj); // { name: ['John', 'Doe'] }

在这个例子中,我们传递了一个空数组给 _.setWith(),然后通过路径 name[0]name[1] 往里面添加了两个名字。

自定义创建值的方式,根据路径

有时候我们希望针对某些路径使用自定义的创建值方式,而对其他路径使用默认的方式。这个时候,我们可以传递一个函数来自定义这些值的创建方式。这个函数接收两个参数:(value, path),其中 value 是要设置的值,path 是该值在对象中的路径。

const _ = require('lodash');
const obj = {};

const customizer = (value, path) => {
  return _.isArray(value) ? value : [];
};

_.setWith(obj, 'name', [], Object);
_.setWith(obj, 'name[0]', 'John', customizer);
_.setWith(obj, 'name[1]', 'Doe', customizer);

console.log(obj); // { name: ['John', 'Doe'] }

在这个例子中,在 _.setWith() 方法的第四个参数中,我们定义了这样一个函数:如果值是一个数组,则使用该数组,否则返回一个空数组。这个函数被使用在路径 name[0]name[1],但没有被使用在路径 name 上。这就是使用 _.setWith 的最大优势之一。

总结

_.setWith() 方法是 Lodash 库中的一个函数,可以用于设置对象中的值。该方法可以使用默认的方法或者自定义方法来创建值,还可以选择是否创建该路径。这个方法在多数情况下比使用原生 JavaScript 代码要方便快捷。