JSON.parse(JSON.stringify(obj))
项目中较常用,但有缺陷,无法处理undefined
、Symbol
、Function
const deepCopy = JSON.parse(JSON.stringify(obj))
lodash的__.cloneDeel()
const _ = require('lodash')
let obj = { a: 1, b: [1,2,3] }
let deepClone = _.cloneDeep(obj)
手写
完整版本的深拷贝,兼顾多种数据结构
let reg = /^[Set|Date|RegExp|Map|Function]$/i
function deepClone(target, hash = new WeakMap) {
if(target === null || typeof target != 'object') return target
let constructor = target.constructor
if(reg.test(constructor.name)) return new constructor(target)
if(hash.get(target)) return hash.get(target)
let cloneObj = new target.constructor()
hash.set(target, cloneObj)
for(let key in target) {
if(target.hasOwnProperty(key)) {
cloneObj[key] = deepClone(target[key], hash)
}
}
return cloneObj
}