深拷贝


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
function fn(obj) {
// 判断数据是否是复杂类型
if (obj instanceof Object) {
//判断数据是否是数组
if (Array.isArray(obj)) {
//声明一个空数组来接收拷贝后的数据
let result = []
obj.forEach(item => {
// 需要递归深层遍历,否则复制的是地址
result.push(fn(item))
})
// 返回输出这个数组,数组拷贝完成
return result
}
else {
//如果是对象,就声明一个空对象来接收拷贝后的数据
let result = {}
for (let k in obj) {
// 使用递归深层遍历
result[k] = fn(obj[k])
}
// 返回输出这个对象,对象拷贝完成
return result
}
}
// 简单数据类型则直接返回输出
return obj
}