ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

深拷贝与浅拷贝

2021-05-31 09:34:40  阅读:106  来源: 互联网

标签:origin target parent id 拷贝 children


1、基本数据类型的拷贝就是值得拷贝

2、引用数据类型的拷贝分为浅拷贝跟深拷贝

浅拷贝:目标对象跟源对象共用一个实体,只是变量名不同

深拷贝:目标对象跟源对象都是独立的个体

3、浅拷贝的方法:Object.assign()

4、深拷贝的方法:

  4-1:将对象转换成字符串(JSON.stringfy)->再将字符串转换成对象(JSON.parse)

    注意:无法拷贝原始对象的函数,因为函数无法转换成字符串

  4-2:递归循环

function deepCopy(origin,target){
  var target = null;
  if(typeof origin === 'object' && origin !== null){
    target = origin instanceof Array ? [] : {}
    for(var key in origin){
      target[key] = deepCopy(origin[key],target[key]);
    }
  }else{
    target = origin;
  }
  return target
}

//例子
var obj = {
  "request_id": "9cf24cde471257bdff47-0000", 
  "code": 0, 
  "data": [
      {
          "id": "1", 
          "parent_id": "0", 
          "name": "佛山分公司", 
          "children": [
              {
                  "id": "2", 
                  "parent_id": "1", 
                  "name": "总经办", 
                  "children": [ ]
              }, 
              {
                  "id": "5", 
                  "parent_id": "1", 
                  "name": "综合管理部", 
                  "children": [
                      {
                          "id": "8", 
                          "parent_id": "5", 
                          "name": "行政部", 
                          "children": [ ]
                      }, 
                      {
                          "id": "9", 
                          "parent_id": "5", 
                          "name": "人事部", 
                          "children": [ ]
                      }
                  ]
              }
          ]
      }
  ], 
}
var target = null;
target = deepCopy(obj,target)
console.log('111',target);

  

标签:origin,target,parent,id,拷贝,children
来源: https://www.cnblogs.com/ilovexiaoming/p/14830038.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有