JS实现深拷贝(双越老师)

/**
 * 深拷贝
 */

const obj1 = {
    age: 20,
    name: 'xxx',
    address: {
        city: 'beijing'
    },
    arr: ['a', 'b', 'c']
}

const obj2 = deepClone(obj1)
obj2.address.city = 'shanghai'
obj2.arr[0] = 'a1'
console.log(obj1.address.city)
console.log(obj1.arr[0])

/**
 * 深拷贝
 * @param {Object} obj 要拷贝的对象
 */
function deepClone(obj = {}) {
    if (typeof obj !== 'object' || obj == null) {
        // obj 是 null ,或者不是对象和数组,直接返回
        return obj
    }

    // 初始化返回结果
    let result
    if (obj instanceof Array) {
        result = []
    } else {
        result = {}
    }

    for (let key in obj) {
        // 保证 key 不是原型的属性
        if (obj.hasOwnProperty(key)) {
            // 递归调用!!!
            result[key] = deepClone(obj[key])
        }
    }

    // 返回结果
    return result
}

自己实现的,更加简单

function deepClone(obj){
  if(!obj || typeof obj !=="object"){
    return obj
  }
  let newobj=obj instanceof Object ? {}:[]
  let keys=Object.keys(obj)
  for(let key of keys){
    newobj[key]=deepClone(obj[key])
  }
  return newobj
}
let obj={
  a:1,
  b:{
    c:1
  },
  d:[2,3,{e:4}]
}
console.log(deepClone(obj))
posted @ 2021-03-09 21:57  abcdefgab  阅读(163)  评论(0)    收藏  举报