zoukankan      html  css  js  c++  java
  • 对象和数组的浅复制和深复制

    概述

    之前踩过一些复制的坑,现在总结一下记录下来,供以后开发时参考,相信对其他人也有用。

    对象的浅复制和深复制

    浅复制:一般用Object.assign,如果支持es6的话也可以用新语法

    const obj = {
        a : 1,
        b : 4
    };
    
    //可以用Object.assign
    const obj2 = Object.assign({}, obj1);
    
    //es6的解构
    const obj2 = { ...obj };
    
    //其实下面这种写法也可以,但是建议使用上面的写法
    const { ...obj2 } = obj;
    
    
    

    深复制:建议用JSON.parseJSON.stringify方法。

    const obj = {
        a : [2, 4, 6],
        b : 4
    };
    const obj2 = JSON.parse(JSON.stringify(obj));
    

    在如下2种情况下不要用上面的方法:

    1. 对象太大了。由于性能关系,耗时太长。
    2. 对象不是JSON不变的,也就是说,JSON.parse(JSON.stringify(obj)) != obj。
      碰到这2中情况,还是老老实实用递归吧。

    数组的浅复制和深复制

    浅复制:有很多种方法,不过一般用slice:

    const a = [2, 3, 5];
    //下面的b,c,d都实现了浅复制
    const b = a.slice();
    const c = a.concat();
    const d = [ ...a ];
    

    深复制:这个最好用库的方法。

    jquery库的浅复制和深复制

    使用$.extend方法。

    const x = {
        a: 1,
        b: { f: { g: 1 } },
        c: [ 1, 2, 3 ]
    };
    
    const y = $.extend({}, x),          //浅复制
          z = $.extend(true, {}, x);    //深复制
    

    其它

    复制数组和对象的时候一定要注意是不是浅复制。如果只想深复制数组或对象的部分内容,可以先深复制整个对象,再浅复制得到的对象。(如果要性能的话,也可以看情况手动优化。)

  • 相关阅读:
    人人开源框架学习笔记
    Gitea安装笔记
    使用sdk方式获取微信的用户信息
    重写java类的equals()和hashCode方法
    Mysql 实现分页功能
    位运算应用和解析
    java代码POST方式请求SOAP
    java实现文件拷贝
    动态创建线程(多线程)处理大量数据
    ActiveMQ监听者接收信息
  • 原文地址:https://www.cnblogs.com/yangzhou33/p/9070111.html
Copyright © 2011-2022 走看看