zoukankan      html  css  js  c++  java
  • js 深拷贝

    第一种方法 JSON.parse(JSON.stringify())
    局限是无法克隆Function,undefined,null类型的
     1 let obj1= {
     2         name:'Chandler Wong! ',
     3         feature:{
     4             hobby:['jazz','dance','guitar','football'],
     5             language: ['Chinese','English','Spanish'],
     6             explain:function (){
     7                 let initData = 'I like '
     8                 this.hobby.forEach(item => {
     9                     initData += item + ','
    10                 })
    11                 this.language.forEach((item,index) => {
    12                     if(index < this.language.length - 1) {
    13                         initData += item+','
    14                     }else {
    15                         initData+='and '+ item + '.'
    16                     }
    17 
    18                 })
    19                 return initData
    20             },
    21             other:{
    22                 liveCity:{
    23                     residence1: 'HuangGang',
    24                     residence2:'WuHan',
    25                     address: 'BeiJing'
    26                 }
    27             }
    28         },
    29         major:['computer science','history'],
    30         introduce:function (){
    31             return 'Hello everybody,my name is '+this.name+this.feature.explain()
    32         },
    33         otherParam:[undefined,null,[],{},0,1,true,false]
    34     }
    35   // 第一种方法 JSON.parse(JSON.stringify())
    36     const obj2=JSON.parse(JSON.stringify(obj1))
    37     // JSON.parse(JSON.stringify())的局限是无法克隆类型为Function,undefined,null
    38     console.log('【第一种方法 JSON.parse(JSON.stringify())】')
    39     console.log('获取feature里边的explain方法',obj1.feature.explain())
    40     console.log('获取introduce方法',obj1.introduce())
    41     console.log('这是obj1',obj1)
    42     console.log('这是拷贝自obj1的obj2',obj2)

     第二方法,递归

     1 function deepClone(sourceObj){
     2         if(!sourceObj && typeof sourceObj != 'object') {
     3             throw new Error('This is not object or sourceObj is empty!')
     4         }
     5         const targetObj = sourceObj.constructor === Array ? [] : {}
     6         Object.keys(sourceObj).forEach(item => {
     7             if(sourceObj[item] && typeof sourceObj[item] === 'object'){
     8                 targetObj[item] = deepClone(sourceObj[item])
     9             }else {
    10                 targetObj[item] = sourceObj[item]
    11             }
    12         })
    13         return targetObj
    14     }
    15    const obj3 = deepClone(obj1)
    16     console.log('这是deepClone',obj3)

  • 相关阅读:
    项目一:CRM(客户关系管理系统)--1
    数据库统一API--SQLAlchemy
    消息队列--1--Redis
    消息队列--2--RabbitMQ
    python之路--web--2--Django-11-信号
    python之路--web--2--Django-10--序列化
    python之路--web--2--Django-8-分页
    python之路--web--2--Django-6-Session
    python之路--web--2--Django-5-Cookie
    python之路--web--2--Django-7-跨站请求伪造
  • 原文地址:https://www.cnblogs.com/chandlerwong/p/15022032.html
Copyright © 2011-2022 走看看