The issue has been closed

使用第三方库:例如lodash的_.cloneDeep方法。
递归拷贝
function deepClone(obj, hash = new WeakMap()) {
if (obj === null) return obj; // 如果是null或者undefined我就不进行拷贝操作
if (obj instanceof Date) return new Date(obj);
if (obj instanceof RegExp) return new RegExp(obj);
// 可能是对象或者普通的值 如果是函数的话是不需要深拷贝
if (typeof obj !== 'object') return obj;
// 对象分为两种,一种是数组一种是普通的对象
if (hash.get(obj)) return hash.get(obj);
let cloneObj = new obj.constructor;
// 找到的是所属于自己的属性才拷贝
hash.set(obj, cloneObj);
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
// 实现一个递归拷贝
cloneObj[key] = deepClone(obj[key], hash);
}
}
return cloneObj;
}
使用StructuredClone方法:虽然这个方法现在还是实验性质的,但它可以拷贝多种类型的对象,包括ArrayBuffer、Blob、ImageData、Map和Set等。
posted by visiky over 1 year ago
posted by Yanyan-Wang over 1 year ago