JS 中深拷贝最优解

100 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

使用递归

 1.检查传递的对象是否null,如果是,返回null
 2.使用Object.assign()和空对象创建初始的浅层克隆
 3.使用Object.keys()和Array.prototype.forEach()确定需要的深度克隆的键值对
 4.如果对象是一个Array,设置clone和length,使用Array.from 创建一个克隆
 const deepClone

代码如下

const deepClone = (obj) => {
    if (obj === null) return null
    let clone = Object.assign({}, obj)
    console.log('clone: ', clone);
    Object.keys(clone).forEach((key) => {
        return clone[key] = typeof obj[key] === 'object' ? deepClone(obj[key]) : obj[key]
    })
    if (Array.isArray(obj)) {
        clone.length = obj.length
        return Array.from(clone)
    }
    return clone
}