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

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

Lodash _.cloneWith() 方法介绍

Lodash是一个JavaScript工具库,提供了很多常用的函数,并且这些函数有着很好的性能表现。其中,_.cloneWith()方法是一个能够深拷贝一个对象或数组,并可以自定义拷贝函数的方法。

语法

_.cloneWith(value, [customizer])

  • value(Object|Array): 要深拷贝的对象或数组。
用法
不使用自定义函数
const _ = require('lodash');

const obj = { a: 1, b: { c: 2 } };
const clonedObj = _.cloneWith(obj);

console.log(obj === clonedObj);  // false
console.log(obj.b === clonedObj.b);  // false
console.log(clonedObj);  // { a: 1, b: { c: 2 } }

在以上代码中,我们在不使用自定义函数的情况下对obj进行了深拷贝,并将拷贝结果赋值给了clonedObj。通过比较objclonedObj的引用,我们可以发现二者指向的不同的内存地址,说明它们是两份完全相等但是没有关联的拷贝。此外,比较obj.bclonedObj.b的引用,我们可以发现同样不相同。这就说明了深拷贝的效果。

使用自定义函数
const _ = require('lodash');

const obj = { a: 1, b: { c: 2 } };
const clonedObj = _.cloneWith(obj, (val) => {
  if (typeof val === 'object') {
    return Object.assign({}, val);
  }
});

console.log(obj === clonedObj);  // false
console.log(obj.b === clonedObj.b);  // false
console.log(clonedObj);  // { a: 1, b: { c: 2 } }

此时我们使用了一个自定义函数作为_.cloneWith()方法的第二个参数。该函数的作用是当lodash尝试对一个Object类型的值拷贝时,将其传入该函数中进行处理,此处我们使用了Objectassign()方法生一个新的对象。这个新的对象就被作为拷贝结果返回。

总结

_.cloneWith()是一个可以进行深拷贝并自定义拷贝函数的Lodash函数。在需要利用一个对象但不能直接改变其属性和值得情况下,可以使用该方法来生成一个不关联原对象的新对象。