📅  最后修改于: 2023-12-03 15:17:25.501000             🧑  作者: Mango
Lodash是一个JavaScript工具库,提供了很多常用的函数,并且这些函数有着很好的性能表现。其中,_.cloneWith()
方法是一个能够深拷贝一个对象或数组,并可以自定义拷贝函数的方法。
_.cloneWith(value, [customizer])
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
。通过比较obj
和clonedObj
的引用,我们可以发现二者指向的不同的内存地址,说明它们是两份完全相等但是没有关联的拷贝。此外,比较obj.b
和clonedObj.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类型的值拷贝时,将其传入该函数中进行处理,此处我们使用了Object
的assign()
方法生一个新的对象。这个新的对象就被作为拷贝结果返回。
_.cloneWith()
是一个可以进行深拷贝并自定义拷贝函数的Lodash函数。在需要利用一个对象但不能直接改变其属性和值得情况下,可以使用该方法来生成一个不关联原对象的新对象。