Codog

关注微信公众号:Codog代码狗

0%

实现对象深拷贝

一个高频面试题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 自己尝试写的,针对数组和对象数据类型,其他更普适的可查看lodash之类的库方法。。
function deepClone(origin) {
// 数组
if(Array.isArray(origin)) {
return origin.map(item => deepClone(item))
}
if(Object.prototype.toString.call(origin) === '[object Object]') {
let res = {}
for(let key in origin) {
res[key] = deepClone(origin[key])
}
return res
}
return origin
}

个人感觉考察点在于数据的类型判断,然手根据相应类型复制数据

在深入一下,深拷贝的问题:

  • 循环引用

需要存储已保存过的数据

  • 递归爆栈

改为while循环,貌似递归都可以进行如此改造

更完整的说明建议阅读:https://yanhaijing.com/javascript/2018/10/10/clone-deep/