实现1:
copy = JSON.parse(JSON.stringify(obj))
由于JSON
并不是支持所有js数据类型(如:Date
,Function
,Error
,RegExp
等都不支持),这种拷贝方式对于数据结构中包含这些类型的都会忽略。
实现2:
function deepCopy(obj){
if(typeof obj != 'object' || obj === null){
return obj
}
var copy = Array.isArray(obj) ? [] : {}
for(key in obj){
copy[key] = deepCopy(obj[key])
}
return copy
}
上面处理方式的思路是,只有数组和对象需要进行深拷贝。根据类型分开处理。
这种方式也并不完美,有些特殊的数据结构,如环状结构(有键值对指向上级对象)使用此代码会因为递归无法终止而造成栈溢出。
网友评论