前端常见面试题(三)深拷贝代码

const obj1{

  age: 20,

  name: 'xxx',

  address: {

    city: 'beijing'

  }

  arr: ['a', 'b', 'c']

}

const obj2 = obj1

obj2.address.city = 'shanghai'

console.log(obj1.address.city)   //shanghai 浅拷贝

 

const obj3 = deepClone(obj1)

obj3.address.city = 'tianjin'

console.log(obj1.address.city)   //还是shanghai 深拷贝

 

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

}

posted @   ALAN_BABABA  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界
点击右上角即可分享
微信分享提示