背景
面试官:您好,请用ts实现一个深拷贝
小A:好的
深拷贝:
- 分不同的类型
- 并且还需要递归
TS:
- 需要使用到一些高阶用法
代码
const deepCopy = <T>(target: T): T => {
if(target === null) {
return target
}
if(target instanceof Date) {
return new Date(target.getTime()) as any
}
if(target instanceof Array) {
const cp = [] as any[]
(target as any[]).forEach(v => cp.push(v))
return cp.map((n: any) => deepCopy<any>(n)) as any
}
if(typeof target === 'object' && target !== {}) {
const cp = {...(target as {[key: string]: any})} as { [key: string]: any }
Object.keys(cp).forEach(k => {
cp[k] = deepCopy<any>(cp[k])
})
return cp as T
}
}
总结
- 判断了null,Date,Array,object
- 在Array,object类型下,值也需要进行deepCopy,也就是递归去负值