zoukankan      html  css  js  c++  java
  • 一行代码完成js对象数组的深拷贝

    1、对于普通数组(数组元素为数字或者字符串),深拷贝很简单,拷贝之后两个数组指针指向的存储地址不同,从而完成深拷贝

    var _test = [1,2,3];//原数组
    var _testCopy = [].concat(_test);//拷贝数组
    _testCopy[0]=4;
    console.log(_test);// [1,2,3]
    console.log(_testCopy);//[4,2,3]

    2、对于对象数组

    //形如
    var _objArr=[{"name":''weifeng"},{"name":"boy"}]

    如果还是利用上述的[].concat()方法拷贝数组,则获取的结果仍然是浅拷贝,改变其一,统统改变,例子:

    var _test = [{"name":"weifeng"},{"name":"boy"}];//原数组
    var _testCopy = [].concat(_test);//拷贝数组
    _testCopy[1].name="girl";
    console.log(_test);// [{"name":"weifeng"},{"name":"girl"}]
    console.log(_testCopy);//[{"name":"weifeng"},{"name":"girl"}]

    从例子上可以看出,这种对于对象数组的拷贝,由于数组内部属性值为引用对象,因此整个拷贝还是浅拷贝,拷贝之后数组各个值的指针还是指向相同的存储地址,
    那么,如何完成此类数组的深拷贝,根据普通数组的深拷贝得到启发,我拷贝一个字符串,不拷贝引用对象,拷贝字符串会新辟一个存储地址,这样就切断了引用对象的指针联系,因此,得到的方法为:

    var _test = [{"name":"weifeng"},{"name":"boy"}];//原数组
    var _testCopy = [].concat(JSON.parse(JSON.stringify(_test)));//拷贝数组,注意这行的拷贝方法
    _testCopy[1].name="girl";
    console.log(_test);// [{"name":"weifeng"},{"name":"boy"}]
    console.log(_testCopy);//[{"name":"weifeng"},{"name":"girl"}]

    至此,大功告成,一行代码完成对象数组的深拷贝!

    此文章为转载,传送门:https://blog.csdn.net/xiongqiangwin1314/article/details/53184638

  • 相关阅读:
    Ubuntu 19.04安装phpipam软件
    ubuntu snmp 安装与配置
    xcode 拷贝新的ios image 进去以后 出现 the divices is locked
    常用 Git 命令清单
    ios 从工程中删除Cocoapods
    ios app上架流程
    MySql某一列累计查询
    Docx4j将html转成word时,br标签为软回车的问题修改
    java面试题
    java获取classpath
  • 原文地址:https://www.cnblogs.com/longxx/p/9376405.html
Copyright © 2011-2022 走看看